#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. Это имеет смысл. Большое спасибо!