правильное использование атрибута processName LogRecord - PullRequest
0 голосов
/ 10 января 2020

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

logger = logging.getLogger(__name__)

Я использую SysLogHandler, и мои логгеры являются иерархическими по всему пакету. У меня есть systemd.service файл, который запускает скрипт как процесс-демон. Я настраиваю родительский логгер (прямой потомок root логгер) с соответствующими фильтрами + обработчиками и т. Д. c. в этом скрипте.

Я использовал довольно простую c строку формата

'%(name)s[%(process)d]: %(levelname)-10s %(message)s'

Это работает просто отлично, но я бы хотел использовать processName вместо этого.

'%(processName)s[%(process)d]: %(levelname)-10s %(message)s'

Я ожидаю, что это сделает мои записи журнала более единообразными в syslog и сделает связь записей журнала с процессом гораздо более очевидной (имя процесса, а не только pid).

Я просмотрел другие ответы SO и просмотрел страницы библиотек logging, logging.handlers, а также поваренную книгу для ведения журналов . Ни один из них, похоже, не намекает на то, как можно использовать этот processName.

Все, что мне нужно, это увидеть имя моего скрипта вместо значения, возвращаемого mutliprocess.current_process().name, которое всегда равно MainProcess

Есть ли документ, который мне не хватает? Или я поступаю неправильно ...?

Python версия: 3.5.X ОС: Ubuntu 16.04 и Centos7

1 Ответ

0 голосов
/ 10 января 2020

В документации есть список атрибутов LogRecord , к которым обращается средство форматирования для этого. Вы, вероятно, хотите использовать %{filename}s. Если вам нужно что-то, что недоступно по умолчанию, вы можете передать дополнительные атрибуты, используя extra kwarg при создании журнала.

...