Python, как установить атрибут логгера для звонящего - PullRequest
0 голосов
/ 12 октября 2018

Я использую logging для регистрации информации и ошибок.И я написал вспомогательную функцию для переноса функции журнала.Однако, поскольку ведение журнала выполняется внутри этой вспомогательной функции, все атрибуты ведения журнала становятся атрибутами этого стека.Но значимые атрибуты для регистрации являются верхним стеком, то есть атрибутом стека вызывающего.Как это исправить?

Пример кода:

# foo.py

import logging 
import log_util

def main():
    formatter = logging.Formatter(fmt = '%(module)s::%(funcName)s - %(message)s')
    s_handler = logging.StreamHandler()
    s_handler.setFormatter(formatter)
    logger = logging.getLogger("main")
    logger.setLevel(logging.DEBUG)
    logger.addHandler(s_handler)

    log_util.helper_log(logger, 'TEST info')

if __name__ == '__main__':
   main()  

# log_util.py

def helper_log(lg, msg):
    # do something
    msg2 = # result of a serial statements
    lg.info(msg2)

Фактический результат:

log_util.py::helper_log - TEST info

Ожидаемый результат:

foo.py::main - TEST info

1 Ответ

0 голосов
/ 12 октября 2018

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

Вместо этого достигайте того, что вы хотите, с помощью logging.Filter.См. Раздел в связанных документах:

Использование фильтров для передачи контекстной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...