Часто при работе с логгированием в Python возникает задача вывода всех сообщений, генерируемых логгером, одновременно в stdout и файл лога. Это может быть полезно для того, чтобы иметь возможность мониторить процесс выполнения программы в реальном времени и при этом сохранять все сообщения для последующего анализа.
К примеру, в коде есть следующие строки:
logger.critical("Что-то пошло не так") print("Что-то пошло не так")
Здесь мы видим дублирование сообщений, что является избыточным и может затруднить поддержку кода.
Для решения этой задачи можно использовать модуль logging
в Python, который предоставляет гибкие возможности для конфигурации логгирования.
Основной компонент в модуле logging
, который используется для вывода сообщений, называется Handler. Существуют разные типы обработчиков, которые можно использовать для вывода сообщений в различные места: файлы, stdout, сеть и т.д.
Для вывода сообщений в stdout и файл лога одновременно, можно настроить два обработчика: StreamHandler
и FileHandler
. StreamHandler
выводит сообщения в stdout (или любой другой поток), а FileHandler
— в файл.
import logging logger = logging.getLogger(__name__) stream_handler = logging.StreamHandler() file_handler = logging.FileHandler('logfile.log') logger.addHandler(stream_handler) logger.addHandler(file_handler)
Теперь при вызове logger.critical("Что-то пошло не так")
, сообщение будет выведено в stdout и записано в файл logfile.log
.
Таким образом, с помощью модуля logging
можно настроить вывод всех сообщений логгера в stdout и log файл, избегая дублирования сообщений.
Добавить комментарий