import logging
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.StreamHandler() # Или FileHandler('logfile.log')
handler.setFormatter(formatter)
logger = logging.getLogger('my_logger')
logger.addHandler(handler)
logger.warning('This is a warning message')
logging.Formatter()
Модуль logging
в Python предоставляет гибкий механизм для форматирования сообщений логов. Класс logging.Formatter()
играет ключевую роль в определении структуры и содержания каждой записи в логе. Он позволяет настроить, какие атрибуты записи лога (время, уровень логирования, имя модуля, сообщение и т.д.) будут включены в вывод и в каком порядке.
logging.Formatter()
Основной способ использования logging.Formatter()
— это создание его экземпляра с указанием строки формата. Эта строка формата использует синтаксис, аналогичный строкам форматирования Python (%
-форматирование или str.format()
). Однако, вместо переменных, в строке формата используются так называемые "log record attributes".
Вот пример базового использования:
import logging
# 1. Создаем Formatter с желаемым форматом
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 2. Создаем Handler (например, StreamHandler для вывода в консоль)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
# 3. Получаем Logger
logger = logging.getLogger('my_application')
logger.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования
# 4. Добавляем Handler к Logger
logger.addHandler(handler)
# 5. Используем Logger для записи сообщений
logger.debug('Это сообщение отладки.')
logger.info('Это информационное сообщение.')
logger.warning('Это предупреждение.')
logger.error('Это сообщение об ошибке.')
logger.critical('Это критическая ошибка.')
В этом примере:
%(asctime)s
: Время создания записи лога.%(name)s
: Имя логгера (в данном случае 'my_application').%(levelname)s
: Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL).%(message)s
: Само сообщение, которое мы передаем в logger.debug()
, logger.info()
и т.д.
logging.Formatter()
может использовать множество других атрибутов записи лога. Вот некоторые из наиболее распространенных:
%(name)s
: Имя логгера.%(levelno)s
: Численное значение уровня логирования (например, 10 для DEBUG, 20 для INFO).%(levelname)s
: Текстовое представление уровня логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL).%(pathname)s
: Полный путь к исходному файлу, в котором было вызвано сообщение лога.%(filename)s
: Имя файла, в котором было вызвано сообщение лога.%(module)s
: Имя модуля, в котором было вызвано сообщение лога.%(funcName)s
: Имя функции, в которой было вызвано сообщение лога.%(lineno)d
: Номер строки в исходном файле, где было вызвано сообщение лога.%(asctime)s
: Время создания записи лога в удобочитаемом формате. Формат по умолчанию - %Y-%m-%d %H:%M:%S,uuu
, но его можно изменить с помощью параметра datefmt
при создании Formatter
.%(process)d
: ID процесса.%(thread)d
: ID потока.%(message)s
: Текст сообщения.datefmt
)
Вы можете настроить формат времени с помощью параметра datefmt
в конструкторе logging.Formatter()
. Например:
import logging
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger = logging.getLogger('my_application')
logger.addHandler(handler)
logger.info('Информационное сообщение.')
В этом случае время будет отформатировано как "YYYY-MM-DD HH:MM:SS".
import logging
# Пример 1: Подробная информация, включая имя файла и номер строки
formatter1 = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s')
# Пример 2: Короткий формат, только время и сообщение
formatter2 = logging.Formatter('%(asctime)s - %(message)s', datefmt='%H:%M:%S')
# Пример 3: Включает имя логгера
formatter3 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
Правильное форматирование логов критически важно для:
logging.Formatter()
— мощный инструмент для настройки вида сообщений логов в Python. Понимание его возможностей позволяет создавать более информативные и удобные для анализа логи, что значительно упрощает отладку, мониторинг и понимание работы приложения. Не забывайте выбирать формат, который наилучшим образом соответствует потребностям вашего проекта.