Как в Python настроить обработчик (handler) для записи логов в файл

Ответ

В стандартном модуле logging Python обработчики (handlers) отвечают за направление сообщений лога в определенное место (консоль, файл, сетевой сокет и т.д.).

Для записи логов в файл используется logging.FileHandler. Процесс настройки включает три основных шага:

  1. Создать логгер — основной объект для записи сообщений.
  2. Создать и настроить обработчик — указать файл и уровень логирования для него.
  3. Создать форматер — определить формат вывода сообщений.
  4. Добавить обработчик к логгеру.

Пример:

import logging

# 1. Получаем (или создаем) логгер
logger = logging.getLogger('my_app_logger')
logger.setLevel(logging.DEBUG) # Устанавливаем общий уровень для логгера

# 2. Создаем обработчик для записи в файл
# Он будет записывать только сообщения уровня ERROR и выше
file_handler = logging.FileHandler('app_errors.log', mode='a', encoding='utf-8')
file_handler.setLevel(logging.ERROR)

# 3. Создаем форматер для определения вида логов
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# 4. Добавляем настроенный обработчик к логгеру
logger.addHandler(file_handler)

# Примеры сообщений
logger.info("Это информационное сообщение, оно не попадет в файл.")
logger.error("Произошла ошибка. Это сообщение будет записано в app_errors.log.")

Другие популярные обработчики:

  • StreamHandler: выводит логи в поток (например, в консоль sys.stderr).
  • RotatingFileHandler: записывает логи в файл и автоматически ротирует его при достижении определенного размера.