Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Логгер (Logger) в Python
Логгер — это объект из модуля logging, который позволяет записывать сообщения о событиях, происходящих во время выполнения программы. Это критичный инструмент для отладки, мониторинга и анализа поведения приложения в production.
Логгирование лучше, чем print(), потому что предоставляет контроль над уровнями важности, форматом вывода, целевыми назначениями (файлы, консоль, сеть) и позволяет отключать/включать логи без изменения кода.
Основные компоненты
- Logger — объект, который регистрирует события
- Handler — определяет куда отправлять логи (консоль, файл, сеть)
- Formatter — определяет формат сообщений
- Filter — фильтрует сообщения по условиям
Уровни логирования
От наименее до наиболее серьёзных:
DEBUG (10) — детальная информация для диагностики
INFO (20) — подтверждение правильной работы
WARNING (30) — предупреждение о возможной проблеме (по умолчанию)
ERROR (40) — серьёзная проблема, функция не выполнена
CRITICAL (50) — критическая ошибка, программа может упасть
Простой пример
import logging
logger = logging.getLogger(__name__)
logger.debug('Отладочная информация')
logger.info('Информационное сообщение')
logger.warning('Это предупреждение')
logger.error('Произошла ошибка')
logger.critical('Критическая ошибка!')
По умолчанию выводится в консоль, начиная с WARNING.
Настройка логгера
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
logger.debug('Это отладочное сообщение')
Вывод:
2024-01-15 10:30:45 - root - DEBUG - Это отладочное сообщение
Логирование в файл
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(name)s | %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.info('Приложение запущено')
Практический пример с функцией
import logging
logger = logging.getLogger(__name__)
def divide(a, b):
try:
logger.debug(f'Попытка разделить {a} на {b}')
result = a / b
logger.info(f'Результат деления: {result}')
return result
except ZeroDivisionError:
logger.error(f'Попытка деления на ноль: {a} / {b}')
raise
except Exception as e:
logger.critical(f'Неожиданная ошибка: {e}')
raise
Логирование исключений
import logging
logger = logging.getLogger(__name__)
try:
result = 1 / 0
except Exception as e:
logger.error(f'Ошибка при вычислении: {e}', exc_info=True)
Логгеры с иерархией
import logging
app_logger = logging.getLogger('myapp')
db_logger = logging.getLogger('myapp.database')
api_logger = logging.getLogger('myapp.api')
Лучшие практики
- Используй именованные логгеры для каждого модуля
- Логируй на разных уровнях: DEBUG для разработки, INFO для отслеживания, ERROR для проблем
- Логируй контекст: переменные, пользователь, запрос
- Избегай print() — используй только
logging - В production используй файлы логов с ротацией
- Не логируй чувствительные данные (пароли, токены)
- Используй структурированное логирование (JSON) для больших систем
Правильное логирование — это искусство следить за приложением без того, чтобы утонуть в информации.