Python日志记录-禁用导入模块的日志记录

我正在使用Python日志模块,并希望禁用由我导入的第三方模块打印的日志消息。例如,我使用了如下内容:

logger=logging.getLogger()
logger.setLevel(级别=logging.DEBUG)
fh=logging.StreamHandler()
fh_formatter=logging.formatter('%(asctime)s%(levelname)s%(lineno)d:%(文件名)s(%(进程)d)-(消息)s'))
设置格式化程序(fh_格式化程序)
logger.addHandler(fh)

当我执行logger.debug(“我的消息!”)时,它会打印出我的调试消息,但它也会打印出我导入的任何模块的调试消息(例如请求和许多其他内容)

我只想看到我感兴趣的模块的日志消息。是否可以让日志模块执行此操作

理想情况下,我希望能够告诉记录器打印来自“ModuleX,ModuleY”的消息,并忽略所有其他消息

我查看了以下内容,但我不想在每次调用导入函数之前都禁用/启用日志记录:
日志记录-如何忽略导入的模块日志

问题是,在不带参数的情况下调用getLogger会返回记录器,因此,当您将级别设置为logging.DEBUG时,也会为使用该记录器的其他模块设置级别

只需使用根记录器而不是即可解决此问题。为此,只需传递一个名称作为参数,例如模块的名称:

logger=logging.getLogger('my\u module\u name'))
#一如既往

这将创建一个新的记录器,因此不会无意中更改其他模块的日志记录级别


显然,您必须使用logger.debug而不是logging.debug,因为后者是调用根记录器的debug方法的方便函数

高级日志教程中提到了这一点。它还允许您以简单的方式知道哪个模块触发了日志消息

发表评论