Как установить собственный формат для записи логов?

Для установки собственного формата логов в Python, используйте модуль logging и его класс logging.Formatter.
  1. Создайте объект Formatter, указав желаемый формат в виде строки. Например: formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  2. Получите Handler (например, StreamHandler для консоли или FileHandler для записи в файл).
  3. Установите созданный Formatter для Handler: handler.setFormatter(formatter)
  4. Добавьте Handler к Logger: logger.addHandler(handler)

Полный пример:

  
  import logging

  # Настройка логгера
  logger = logging.getLogger('my_logger')
  logger.setLevel(logging.DEBUG)

  # Создание обработчика (handler) - вывод в консоль
  handler = logging.StreamHandler()

  # Создание форматтера
  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

  # Установка форматтера для обработчика
  handler.setFormatter(formatter)

  # Добавление обработчика к логгеру
  logger.addHandler(handler)

  # Логирование
  logger.debug('Отладочное сообщение')
  logger.info('Информационное сообщение')
  logger.warning('Предупреждение')
  logger.error('Ошибка')
  logger.critical('Критическая ошибка')
  
  

Чтобы установить собственный формат для записи логов в Python, необходимо воспользоваться модулем logging и сконфигурировать его, используя объекты Formatter.

Основные шаги:

  1. Импортируйте модуль logging:
    import logging
  2. Создайте объект Formatter, указав желаемый формат:

    Формат задается строкой, использующей специальные символы, такие как:

    • %(asctime)s: Дата и время записи.
    • %(levelname)s: Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL).
    • %(name)s: Имя логгера.
    • %(message)s: Сообщение, которое необходимо записать в лог.
    • %(filename)s: Имя файла, из которого была вызвана запись в лог.
    • %(lineno)d: Номер строки, из которой была вызвана запись в лог.
    • %(funcName)s: Имя функции, из которой была вызвана запись в лог.
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    В этом примере, формат лог-сообщения будет следующим: Дата и время - Имя логгера - Уровень - Сообщение

  3. Создайте обработчик (Handler), который будет записывать логи:

    Существует несколько типов обработчиков, например:

    • logging.StreamHandler: Выводит логи в консоль.
    • logging.FileHandler: Записывает логи в файл.
    handler = logging.StreamHandler()  # Для вывода в консоль
    # или
    # handler = logging.FileHandler('my_app.log')  # Для записи в файл
  4. Установите форматтер для обработчика:
    handler.setFormatter(formatter)
  5. Получите логгер:
    logger = logging.getLogger('my_logger')
  6. Установите уровень логирования для логгера:

    Например, logging.INFO будет записывать сообщения уровней INFO, WARNING, ERROR и CRITICAL.

    logger.setLevel(logging.INFO)
  7. Добавьте обработчик к логгеру:
    logger.addHandler(handler)
  8. Теперь можно использовать логгер для записи сообщений:
    logger.info('This is an info message')
    logger.warning('This is a warning message')
    logger.error('This is an error message')

Пример полного кода:

import logging

# 1. Создаем объект Formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 2. Создаем обработчик (например, для вывода в консоль)
handler = logging.StreamHandler()
handler.setFormatter(formatter)

# 3. Получаем логгер
logger = logging.getLogger('my_app')
logger.setLevel(logging.INFO)  # Устанавливаем уровень логирования

# 4. Добавляем обработчик к логгеру
logger.addHandler(handler)

# 5. Используем логгер
logger.info('Application started')
logger.warning('Low memory detected')
logger.error('Database connection failed')

Дополнительные возможности:

  • Использование конфигурационного файла: Можно определить формат логирования и другие параметры в конфигурационном файле (например, в формате YAML или INI) и загрузить его с помощью функций модуля logging.config. Это полезно для более сложной конфигурации и позволяет изменять логирование без изменения кода.
  • Кастомные аттрибуты: Можно передавать дополнительные данные в лог-сообщения и включать их в формат.
  • Ротация лог-файлов: Для больших приложений рекомендуется использовать logging.handlers.RotatingFileHandler или logging.handlers.TimedRotatingFileHandler для автоматической ротации лог-файлов и предотвращения их разрастания.
0