Обработчик формата ведения журнала Python стандартный формат вывода по умолчанию

#python #python-3.x #logging

#python #python-3.x #ведение журнала

Вопрос:

Я использую logging стандартную библиотеку и добавляю обработчик для вывода в стандартный вывод. Однако новый обработчик, похоже, не имеет формата ведения журнала по умолчанию, ниже приведен пример

 In [23]: root = logging.getLogger() 
    ...: handler = logging.StreamHandler(sys.stdout) 
    ...: log_level_int = getattr(logging, "INFO") 
    ...: root.setLevel(log_level_int) 
    ...: handler.setLevel(log_level_int) 
    ...: root.addHandler(handler)          

In [28]: logging.info("test")                                                                                                                                                                                      
INFO:root:test # default stderr handler
test # newly added stdout handler, doesn't have the log level information printed
 

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

Ответ №1:

Поскольку у вас есть пользовательский обработчик, вам необходимо установить форматировщик.

 In [32]: handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))


In [33]: logging.error('test')
root - ERROR - test
 

или даже форматировщик по умолчанию:

 handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
 

Доступные атрибуты ведения журнала

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

Вы также можете использовать настройку ведения журнала logging.basicConfig.

Из документации:

Выполняет базовую настройку системы ведения журнала, создавая StreamHandler с форматером по умолчанию и добавляя его в корневой регистратор.

Итак, что-то столь же простое, как:

 import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
 
 logging.info('test')
 

результаты в:

 INFO:root:test
 

Комментарии:

1. Это имеет смысл. Большое спасибо!