Часто в процессе разработки программ на Python возникает потребность ведения логов. При этом может возникнуть необходимость одновременной записи логов в файл и их вывода на стандартный вывод (stdout). Примером может служить ситуация, когда разрабатывается сложное многопоточное приложение и для отслеживания процесса выполнения необходимо сразу видеть логи на экране и сохранять их в файл для последующего анализа.
Модуль logging
в Python предоставляет широкие возможности для настройки ведения логов. Для решения описанной проблемы можно использовать следующий код:
import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) handler1 = logging.StreamHandler() handler2 = logging.FileHandler('logfile.log') formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler1.setFormatter(formatter) handler2.setFormatter(formatter) logger.addHandler(handler1) logger.addHandler(handler2)
В этом коде создается два обработчика: StreamHandler
для вывода логов на стандартный вывод и FileHandler
для записи логов в файл. Оба обработчика используют один и тот же форматтер, который задает формат логов. Затем обработчики добавляются к логгеру.
Теперь, вызывая методы logger.debug()
, logger.info()
, logger.warning()
, logger.error()
и logger.critical()
, можно выводить логи на стандартный вывод и записывать их в файл одновременно.
Дополнительно можно настроить уровень логирования для каждого из обработчиков и логгера в целом. Это позволяет более гибко настраивать процесс ведения логов, например, выводить на экран только сообщения уровня ERROR
и выше, а в файл записывать все сообщения.
Добавить комментарий