Есть ли способ заставить журналирование Python с помощью logging
модуля автоматически выводить вещи на стандартный вывод в дополнение к файлу журнала, куда они должны идти? Например, я хотел бы все вызовы logger.warning
, logger.critical
, logger.error
чтобы перейти к их предназначенных для этого местах , но в дополнение всегда быть скопированы stdout
. Это сделано для того, чтобы избежать дублирования сообщений, таких как:
mylogger.critical("something failed")
print "something failed"
Ответы:
Весь вывод журнала обрабатывается обработчиками; просто добавьте
logging.StreamHandler()
в корневой логгер.Вот пример настройки потокового обработчика (с использованием
stdout
вместо значения по умолчаниюstderr
) и добавления его в корневой логгер:источник
stdout
?logging.Formatter
.Самый простой способ войти в stdout:
источник
stream=sys.stdout
все еще работают для входа в консоль для меня.Это возможно с использованием нескольких обработчиков.
Пожалуйста, смотрите: https://docs.python.org/2/howto/logging-cookbook.html
источник
sys.stdout
параметра inch = logging.StreamHandler()
Вы можете создать два обработчика для файла и стандартного вывода, а затем создать один регистратор с
handlers
аргументом дляbasicConfig
. Это может быть полезно, если у вас одинаковый log_level и формат вывода для обоих обработчиков:источник
Самый простой способ войти в файл и в stderr:
источник
Вот решение, основанное на мощном, но плохо документированном
logging.config.dictConfig
методе . Вместо того, чтобы отправлять каждое сообщение журналаstdout
, он отправляет сообщения с уровнем журналаERROR
и вышеstderr
и всем остальнымstdout
. Это может быть полезно, если другие части системы слушаютstderr
илиstdout
.источник
Так как никто не разделил аккуратные два лайнера, я поделюсь своим собственным:
источник
Вот очень простой пример:
Вывод покажет "test msg" на стандартный вывод, а также в файл.
источник