Python,如何将记录器的属性设置为调用者

时间:2018-10-12 17:56:14

标签: python python-3.x logging

我正在使用logging记录信息和错误。我编写了一个辅助函数来包装log函数。但是,由于日志记录是在此辅助函数内部执行的,因此所有日志记录属性都将成为该堆栈的属性。但是要记录的有意义的属性是上层堆栈的属性,即调用者的堆栈属性。我该如何解决?

示例代码:

# 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 :(得分:0)

请勿尝试使用辅助功能执行此任务。记录器不应作为参数传递,而是每个模块都应创建并使用模块级(全局)记录器实例。

相反,使用channel.setPty(true); 实现您想要的。请参阅下面链接的文档中的部分:

Using Filters to impart contextual information