Как передать параметры в настраиваемые средства форматирования журналов с помощью конфигурации ведения журнала Python? - PullRequest
0 голосов
/ 06 августа 2020

В моем проекте python у меня есть настраиваемое средство форматирования журнала, которому я хотел бы передать строку при создании, и чтобы он добавил ее в сообщение, в котором выполняется выход:

class MyCustomFormatter(logging.Formatter):
def __init__(self, *args, **kwargs):
    super(MyCustomFormatter, self).__init__(*args, **kwargs)

    print(f'configuring {args} {kwargs}')

    if 'constants' in kwargs:
        self.constants = kwargs.get('constants')

Я настраиваю ведение журнала, используя конфигурацию logging.yml, предоставленную python:

version: 1
formatters:
    standardFormatter:
        class: MyCustomFormatter
        constants: "constants"
handlers:
    consoleHandler:
        class: logging.StreamHandler
        level: INFO
        formatter: standardFormatter
        stream: ext://sys.stdout
root:
    level: DEBUG
    handlers: [consoleHandler]

Я ожидал, что «константы» будут переданы в kwargs в MyCustomFormatter. init , однако kwargs кажется пустым. Как мне настроить значение в конфигурации ведения журнала и передать его в мой форматировщик?

1 Ответ

1 голос
/ 06 августа 2020

Неизвестные ключи, которые находятся в журнале dict, передаются только как kwargs в конструктор для обработчиков или при использовании настраиваемого экземпляра со специальным ключом (). Итак, в вашем случае вам нужно будет настроить модуль форматирования следующим образом:

formatters:
    standardFormatter:
        (): importpath.for.MyCustomFormatter
        constants: constants

Я бы порекомендовал вообще не использовать dictConfig и go с fileConfig, что делает много особенных такие случаи проще.

...