如何在整个 Python 应用程序中使用单个 Python 日志记录对象?

qua*_*231 2 python logging python-logging

Python提供了日志记录模块。我们可以使用记录器代替打印并使用其多个日志级别。这里的问题是,当我们使用记录器时,我们将日志字符串传递到记录器对象中。这意味着记录器对象必须可以从整个 Python 程序中的每个函数/方法和类访问。

logger = logging.getLogger('mylogger')
logger.info('This is a message from mylogger.')
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,对于可能分为多个源文件并由多个函数/方法和类组成的大型 Python 程序,我们如何确保在任何地方都使用相同的记录器对象来记录消息?或者我对如何使用日志记录模块有错误的想法?

J_H*_*J_H 5

或者我对如何使用日志记录模块有错误的想法?

是的,错误的想法。

对于大型 Python 程序...拆分为多个源文件...我们如何确保在任何地方都使用相同的记录器对象?

那不是目标。

我们记录消息,以便维护工程师稍后可以收拾残局。

每个模块使用一个记录器。

这是一个记录器将显示它来自的源模块的功能。我们用它来快速缩小“运行了什么代码?”的范围。&“输入什么值?” 这有助于维护人员重现和修复观察到的错误输出。


通常的习惯用法是每个模块都以

logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

这样,logger.error(...)类似的调用将显示报告错误的模块的名称,这使维护人员可以快速关注导致错误的代码。


我们确实希望所有记录器遵循相同的输出格式,以便所有记录器生成可以由某些awk脚本等统一解析的兼容消息。

通常,“if main”子句会调用 basicConfig一次,从而解决该问题。