首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python日志记录-禁用导入模块的日志记录

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

Stack Overflow用户
提问于 2016-02-11 04:17:05
回答 7查看 89.4K关注 0票数 146

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

代码语言:javascript
复制
logger = logging.getLogger()
logger.setLevel(level=logging.DEBUG)
fh = logging.StreamHandler()
fh_formatter = logging.Formatter('%(asctime)s %(levelname)s %(lineno)d:%(filename)s(%(process)d) - %(message)s')
fh.setFormatter(fh_formatter)
logger.addHandler(fh)

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

我只想看到来自我感兴趣的模块的日志消息。有没有可能让日志模块做到这一点?

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

我查看了以下内容,但我不希望在每次调用导入的函数之前禁用/启用日志记录:logging - how to ignore imported module logs?

EN

回答 7

Stack Overflow用户

发布于 2016-02-11 05:27:29

如果您要使用python logging包,那么在使用它的每个模块中定义一个记录器是一个常见的约定。

代码语言:javascript
复制
logger = logging.getLogger(__name__)

许多流行的python包都可以做到这一点,包括requests。如果包使用此约定,则很容易为其启用/禁用日志记录,因为记录器名称将与包同名(或将是该记录器的子项)。您甚至可以将其记录到与其他记录器相同的文件中。

代码语言:javascript
复制
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

requests_logger = logging.getLogger('requests')
requests_logger.setLevel(logging.DEBUG)

handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
requests_logger.addHandler(handler)
票数 58
EN

Stack Overflow用户

发布于 2016-02-11 04:37:39

@Bakuriu非常优雅地解释了这个函数。相反,您可以使用getLogger()方法来检索和重新配置/禁用不需要的记录器。

我还想添加logging.fileConfig()方法,该方法接受一个名为disable_existing_loggers的参数,该参数将禁用先前定义的任何记录器(即,在导入的模块中)。

票数 10
EN

Stack Overflow用户

发布于 2019-09-14 16:19:33

你可以使用类似这样的东西:

代码语言:javascript
复制
logging.getLogger("imported_module").setLevel(logging.WARNING)
logging.getLogger("my_own_logger_name").setLevel(logging.DEBUG)

这会将我自己的模块的日志级别设置为DEBUG,同时防止导入的模块使用相同的级别。

注意:"imported_module"可以替换为imported_module.__name__ (不带引号),"my_own_logger_name"可以替换为__name__,如果您喜欢这样做的话。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35325042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档