logging
в Python. Сначала создается логгер, затем для него настраиваются разные обработчики (Handler
). Каждый обработчик можно настроить для вывода логов в определенное место (файл, консоль и т.д.) и с определенным уровнем логирования. Например:
import logging
# Создаем логгер
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# Создаем обработчик для записи в файл
file_handler = logging.FileHandler('my_app.log')
file_handler.setLevel(logging.INFO)
# Создаем обработчик для вывода в консоль
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Создаем форматтер
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# Добавляем обработчики к логгеру
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# Используем логгер
logger.debug('Это отладочное сообщение')
logger.info('Это информационное сообщение')
logger.warning('Это предупреждение')
logger.error('Это ошибка')
logger.critical('Это критическая ошибка')
В этом примере, отладочные сообщения (DEBUG) будут выводиться только в консоль, а информационные (INFO) и выше - и в файл, и в консоль.
Настроить несколько обработчиков для записи логов в разные места можно с помощью модуля logging
в Python. Основная идея заключается в создании нескольких обработчиков (Handlers) и привязке их к одному или нескольким логгерам (Loggers). Вот пример, как это можно сделать для записи в файл и в консоль:
import logging
# 1. Создаем логгер
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования
# 2. Создаем обработчик для записи в файл
file_handler = logging.FileHandler('my_application.log')
file_handler.setLevel(logging.INFO) # Устанавливаем минимальный уровень логирования для файла
# 3. Создаем обработчик для вывода в консоль
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG) # Устанавливаем минимальный уровень логирования для консоли
# 4. Создаем форматтеры для обработки сообщений
formatter_file = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter_console = logging.Formatter('%(levelname)s: %(message)s')
# 5. Привязываем форматтеры к обработчикам
file_handler.setFormatter(formatter_file)
console_handler.setFormatter(formatter_console)
# 6. Добавляем обработчики к логгеру
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 7. Используем логгер
logger.debug('Это отладочное сообщение') # Выводится только в консоль, если ее уровень DEBUG
logger.info('Это информационное сообщение') # Выводится и в файл, и в консоль
logger.warning('Это предупреждение') # Выводится и в файл, и в консоль
logger.error('Это сообщение об ошибке') # Выводится и в файл, и в консоль
logger.critical('Это критическое сообщение') # Выводится и в файл, и в консоль
Пояснения:
logging.getLogger('my_logger')
создает или возвращает существующий логгер с указанным именем. Можно использовать любое имя, важно, чтобы оно было согласовано во всем коде.logger.setLevel(logging.DEBUG)
устанавливает минимальный уровень, начиная с которого сообщения будут обрабатываться.logging.FileHandler('my_application.log')
создает обработчик для записи в файл. Укажите желаемое имя файла.logging.StreamHandler()
создает обработчик для вывода в стандартный поток (обычно консоль).setLevel()
у каждого обработчика определяет минимальный уровень логирования, который будет им обрабатываться. Это позволяет, например, писать только важную информацию в файл, а все остальное выводить в консоль во время разработки.logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
создает объект Formatter, который определяет формат записи лога. Доступны различные переменные, такие как %(asctime)s
(время), %(name)s
(имя логгера), %(levelname)s
(уровень логирования) и %(message)s
(сообщение).setFormatter()
привязывает форматтер к обработчику.addHandler()
добавляет обработчик к логгеру. Один логгер может иметь несколько обработчиков.logger.debug()
, logger.info()
, logger.warning()
, logger.error()
и logger.critical()
создают записи в логе с соответствующими уровнями.Ключевые моменты:
logging.WARNING
или logging.ERROR
, чтобы избежать переполнения лог-файла. В консоль можно выводить более подробную информацию во время разработки.logging.config
предоставляет инструменты для загрузки конфигурации из файлов.