Python日志记录:为所用模块的所有记录器设置处理程序

beg*_*er_ 8 python logging

我有我的主脚本用argparse解释cli命令,然后通过从另一个模块(由我自己制作)调用相应的东西来启动应用程序.

我现在的问题是如何将处理程序从该模块附加到记录器.使用检索记录器

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

因此我在主脚本中加入了以下内容:

consoleHandler = logging.StreamHandler()
logger = logging.getLogger('MyModule')
logger.addHandler(consoleHandler)
Run Code Online (Sandbox Code Playgroud)

但是'MyModule'有0个日志输出.日志级别是正确的,例如应该有输出.

MyModule我有以下几点:

logging.getLogger(__name__).addHandler(logging.NullHandler())
Run Code Online (Sandbox Code Playgroud)

但是删除它没有任何区别.

那么我怎样才能正确地将处理程序附加到记录器MyModule

Vin*_*jip 1

您没有得到输出的原因很可能是您没有在记录器上设置级别,因此它将默认为WARNING. 尝试这样做logger.setLevel(logging.DEBUG),看看是否会产生输出。我知道你说日志级别是正确的,但我看不出任何其他原因不会产生输出。如果您愿意,您可以尝试发布一个小型独立脚本来演示该问题。

NullHandler只需为库模块添加即可满足其在未配置日志记录的应用程序中的使用。在配置日志记录的应用程序模块中不需要它。

一般来说,您可以向根记录器添加一个处理程序,所有模块中的记录器都会使用它。

更新:对 Kobi K 答案的评论表明已在处理程序上设置了级别 - 这还不够,因为您需要在记录器上设置一个级别,首先检查其级别。仅当记录器级别允许事件通过时,处理程序(及其级别)才会发挥作用。