где модуль журналирования python записывает журнал по умолчанию? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть скрипт на Python, запускаемый jenkins . logging используется модуль.

logging.basicConfig(filename="/tmp/test.log",
                    format="%(asctime)s %(levelname)s %(message)s",
                    filemode="a",
                    level=logging.INFO)

Если вышеуказанная конфигурация удалена, я не могу найти журнал, сгенерированный следующим оператором:

logging.info("xxxxxxx")

Я не нашелэто в системном журнале машины Дженкинса.Я не нашел его в выводе на консоль jenkins.

Есть подсказки?Спасибо

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Справка для модуля ведения журнала гласит:

Поведение по умолчанию - создание StreamHandler, который пишет в sys.stderr, установка форматера с использованием строки формата BASIC_FORMAT и добавление обработчика вroot logger.

Как указано в (теперь удаленном) комментарии, это описание относится к basicConfig(), который действительно вызывается не сразу.Что действительно происходит, так это то, что корневой логгер инициализируется функционально эквивалентным способом, и именно это используется в качестве стандартного логгера.На самом деле он инициализируется в два этапа: во время загрузки модуля инициализируется корневой логгер:

root = RootLogger(WARNING)
Logger.root = root
Logger.manager = Manager(Logger.root)

, но никакой обработчик не подключен:

>>> logging.root.__dict__
{'name': 'root', 'parent': None, 'handlers': [], 'level': 30, 'disabled': 0, 'propagate': 1, 'filters': []}

Когда logging.warning()(или error() или info() или ...) вызывается, вызывается basicConfig(), который добавляет StreamHandler в sys.stderr:

def warning(msg, *args, **kwargs):
"""
Log a message with severity 'WARNING' on the root logger.
"""
if len(root.handlers) == 0:
    basicConfig()
root.warning(msg, *args, **kwargs)

Это python2.7.Я предполагаю, что python3 работает так же, но я не проверял.

0 голосов
/ 08 июня 2018

По умолчанию ведение журнала пишет в stderr.Причина, по которой вы не видите напечатанный оператор, заключается в том, что уровень журнала по умолчанию - предупреждение.

>>> import logging
>>> logging.error('a message!')
ERROR:root:a message!
>>> logging.warning('a message!')
WARNING:root:a message!
>>> logging.info('a message!')
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...