我正在使用Python日志记录模块,并希望禁用由我导入的第三方模块打印的日志消息。例如,我使用的内容如下所示:
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?
发布于 2016-02-11 05:27:29
如果您要使用python logging
包,那么在使用它的每个模块中定义一个记录器是一个常见的约定。
logger = logging.getLogger(__name__)
许多流行的python包都可以做到这一点,包括requests
。如果包使用此约定,则很容易为其启用/禁用日志记录,因为记录器名称将与包同名(或将是该记录器的子项)。您甚至可以将其记录到与其他记录器相同的文件中。
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)
发布于 2016-02-11 04:37:39
@Bakuriu非常优雅地解释了这个函数。相反,您可以使用getLogger()
方法来检索和重新配置/禁用不需要的记录器。
我还想添加logging.fileConfig()
方法,该方法接受一个名为disable_existing_loggers
的参数,该参数将禁用先前定义的任何记录器(即,在导入的模块中)。
发布于 2019-09-14 16:19:33
你可以使用类似这样的东西:
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__
,如果您喜欢这样做的话。
https://stackoverflow.com/questions/35325042
复制相似问题