首页 > 解决方案 > 来自多个地方的 Python 日志记录调用模块

问题描述

我想使用 python 的日志记录模块和点“。”为我的项目设置日志记录层次结构。此处描述的名称结构:https ://docs.python.org/2/library/logging.html#logging.getLogger

对于给定的模块(bar.py),我想设置记录器,例如:

log = logging.getLogger('x.bar')

然后我可以在整个 bar.py 模块中使用 log.(debug/info/warning/etc...)。我知道 bar.py 永远不会直接运行,但其中的函数可能会从其他几个模块调用 - 所以我不知道在代码片段中将“x”设置为什么。我希望 bar.py 从它的调用者 (x) 继承日志处理程序和格式化程序。

标签: pythonlogging

解决方案


通过实例化模块范围的记录器的标准方法logging.getLogger('mymodule')不是为您的预期行为量身定制的。相反,您应该做的是让调用者将记录器作为参数传递给模块中的函数

# mymodule.py
def foo(plogger, a, b):
    logger=plogger.getChild('bar')
    ...

推荐阅读