Python,日志记录和设计

use*_*802 2 python logging

我在编写 python 模块和类时经常有疑问,特别是:

我应该在哪里/如何放置控制日志记录的主标志以及在哪里/如何创建记录器,

  • 它应该在模块级别吗?---因此需要global MyLogger在每个方法中几乎无处不在。

  • 它应该是传递给方法和/或类的参数吗?也许决定一个方法或类是否需要它,也许我可以使用**args星星魔法,像myMethod(..., logger=Mylogger)?

  • 我应该在哪里定义/设置I_logged_something标志?(...或者我应该依靠if MyLogger: MyLogger.log('something')

  • 当类或模块被导入时呢?

什么是 Pythonic 的日志记录方式?您如何使用日志记录工具?

Mar*_*ers 5

无论如何,您都可以在任何地方使用日志记录。

在您的模块中,使用:

import logging

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

并注销。根据您记录的消息类型使用不同的级别(log.info()log.debug()log.error()等)。

你的主入口点,则配置logging模块输出。这可以包括完全禁用任何输出,或将调试信息定向到文件,但将错误记录到控制台。

你的模块不需要关心,logging模块处理输出处理程序的配置和格式化为全局状态。