我正在使用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方法的方便函数
高级日志教程中提到了这一点。它还允许您以简单的方式知道哪个模块触发了日志消息