← Назад к вопросам
В чем отличие между log и error log в контексте логирования в Python?
1.0 Junior🔥 161 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Различие между log и error log в Python логировании
В Python логировании существует система уровней (levels), и log/error log — это просто разные уровни логирования. Разберу подробно разницу и когда что использовать.
Уровни логирования в Python
Python имеет 5 основных уровней (от менее критичных к более критичным):
import logging
logging.DEBUG # 10 - самая детальная информация для диагностики
logging.INFO # 20 - основные события (запуск, завершение)
logging.WARNING # 30 - предупреждения (что-то подозрительное)
logging.ERROR # 40 - ошибки (что-то сломалось)
logging.CRITICAL # 50 - критические ошибки (система не может работать)
Структура логирования
log — общий термин для всех записей логирования
error log — конкретный тип логирования (запись об ошибке)
Это похоже на:
животное — общая категория
собака — конкретный тип животного
Практические примеры
Базовое использование
import logging
# Конфигурируем логирование
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Разные уровни логирования
logger.debug("Отладочная информация") # НЕ выведется (уровень INFO)
logger.info("Приложение запустилось") # ВЫВЕДЕТСЯ
logger.warning("Это предупреждение") # ВЫВЕДЕТСЯ
logger.error("Ошибка при обработке") # ВЫВЕДЕТСЯ
logger.critical("Система упала!") # ВЫВЕДЕТСЯ
Пример: обработка исключений
import logging
logger = logging.getLogger(__name__)
def divide(a, b):
try:
result = a / b
logger.info(f"Деление успешно: {a} / {b} = {result}") # general log
return result
except ZeroDivisionError as e:
logger.error(f"Ошибка деления: {e}") # ERROR LOG
return None
except Exception as e:
logger.critical(f"Непредвиденная ошибка: {e}") # CRITICAL
raise
divide(10, 2) # INFO: Деление успешно
divide(10, 0) # ERROR: Ошибка деления
Разница между log() и error()
Метод logger.log()
# log() — универсальный метод с явным указанием уровня
logger.log(logging.DEBUG, "Отладка") # уровень явно указан
logger.log(logging.INFO, "Инфо") # уровень явно указан
logger.log(logging.ERROR, "Ошибка") # уровень явно указан
# Это то же самое, что:
logger.debug("Отладка")
logger.info("Инфо")
logger.error("Ошибка")
Метод logger.error()
# error() — специализированный метод для ОШИБОК
logger.error("Что-то пошло не так")
# Это эквивалентно:
logger.log(logging.ERROR, "Что-то пошло не так")
Когда использовать что
logger.info() / logger.debug() / logger.warning()
import logging
logger = logging.getLogger(__name__)
# ИНФОРМАЦИОННОЕ логирование
logger.info("Приложение запустилось на порту 8000")
logger.info("Пользователь john_doe вошёл в систему")
logger.info("Данные успешно загружены из БД")
# ОТЛАДОЧНОЕ логирование
logger.debug("Переменная x = 42")
logger.debug("Запрос SQL: SELECT * FROM users WHERE id = 1")
# ПРЕДУПРЕЖДЕНИЯ
logger.warning("Размер памяти выше 80%")
logger.warning("Сессия истекает через 5 минут")
logger.error()
import logging
logger = logging.getLogger(__name__)
def save_user(user_data):
try:
# бизнес логика
db.save(user_data)
logger.info("Пользователь успешно сохранён") # успех
except ValidationError as e:
logger.error(f"Ошибка валидации: {e}") # ОШИБКА - что-то сломалось
except DatabaseError as e:
logger.error(f"Ошибка БД: {e}") # ОШИБКА - что-то сломалось
logger.critical("Связь с БД потеряна") # КРИТИЧНО - система не может работать
Полный пример приложения
import logging
from logging.handlers import RotatingFileHandler
# Конфигурация логирования
logger = logging.getLogger('myapp')
logger.setLevel(logging.DEBUG)
# Формат логов
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Файловый обработчик
file_handler = RotatingFileHandler('app.log', maxBytes=1MB, backupCount=5)
file_handler.setLevel(logging.ERROR) # В файл только ошибки
file_handler.setFormatter(formatter)
# Консольный обработчик
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # В консоль все выше INFO
console_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# Использование
def process_payment(amount):
logger.info(f"Начинаю обработку платежа {amount} руб") # log
try:
if amount <= 0:
logger.warning(f"Сумма недопустимая: {amount}")
return False
# обработка платежа
logger.debug(f"Сумма валидна: {amount}")
logger.info(f"Платёж успешно обработан: {amount} руб")
return True
except NetworkError as e:
logger.error(f"Ошибка сети при платеже: {e}") # error log
return False
except Exception as e:
logger.critical(f"Непредвиденная ошибка: {e}")
raise
process_payment(100) # INFO: успех
process_payment(-50) # WARNING: предупреждение
process_payment(None) # ERROR: ошибка
Различие в обработке
import logging
logger = logging.getLogger(__name__)
# Обычное логирование
logger.info("Всё работает нормально")
# Логирование с трейсом исключения
try:
result = 10 / 0
except ZeroDivisionError:
logger.error("Ошибка деления", exc_info=True) # выведет полный стек
# OUTPUT:
# ERROR - Ошибка деления
# Traceback (most recent call last):
# File "script.py", line 3, in <module>
# result = 10 / 0
# ZeroDivisionError: division by zero
Когда что использовать
| Уровень | Когда | Пример |
|---|---|---|
| DEBUG | Информация для разработчика | Значение переменной, SQL запрос |
| INFO | Важные события | Запуск app, пользователь залогинился |
| WARNING | Подозрительно, но работает | Медленный запрос, низкая память |
| ERROR | Ошибка, но app продолжает работать | Ошибка валидации, БД недоступна |
| CRITICAL | Ошибка, app может упасть | Ошибка инициализации, нет диска |
Фильтрация по уровню
import logging
logger = logging.getLogger(__name__)
# В PRODUCTION: только WARNING и выше
logger.setLevel(logging.WARNING)
# В DEVELOPMENT: всё до DEBUG
logger.setLevel(logging.DEBUG)
# Это значит:
logger.info("Это не выведется") # < WARNING
logger.warning("Это выведется") # >= WARNING
logger.error("Это выведется") # >= WARNING
Резюме
log — общий термин для всех записей логирования (info, warning, error, debug)
error log — конкретный тип логирования для ошибок (logging.ERROR уровень)
Важно выбирать правильный уровень:
- INFO для успешных операций
- ERROR для ошибок, которые нужно исправить
- WARNING для проблем, требующих внимания
- DEBUG для разработки
Правильное логирование помогает быстро найти проблемы и понять, что случилось в production.