python 如何从其他模块禁用记录器?

baubqpgj  于 2023-02-15  发布在  Python
关注(0)|答案(4)|浏览(223)

我在我的项目中使用了几个模块,但是这些模块从日志记录器输出了大量的日志,这很烦人。所以我通过以下方式关闭日志:

boto_log = logging.getLogger("boto")
boto_log.setLevel(logging.CRITICAL)
es_log = logging.getLogger("elasticsearch")
es_log.setLevel(logging.CRITICAL)
urllib3_log = logging.getLogger("urllib3")
urllib3_log.setLevel(logging.CRITICAL)

虽然这样做是可行的,但代码看起来很冗长。有没有更好、更简单的方法可以做到这一点?

tktrz96b

tktrz96b1#

您可以使用logging.config.dictConfiglogging.config.fileConfig禁用现有记录器。

import logging.config
logging.config.dictConfig({
    'version': 1,
    # Other configs ...
    'disable_existing_loggers': True
})

您也可以循环现有的记录器并手动禁用。

for name, logger in logging.root.manager.loggerDict.iteritems():
    logger.disabled=True
i1icjdpr

i1icjdpr2#

也许你可以重构它,以削减一些样板文件:

for _ in ("boto", "elasticsearch", "urllib3"):
    logging.getLogger(_).setLevel(logging.CRITICAL)
mwyxok5s

mwyxok5s3#

您可以从logging.root.manager.loggerDict获得所有日志记录器(不包括根日志记录器)的列表。

for _ in logging.root.manager.loggerDict:
    logging.getLogger(_).setLevel(logging.CRITICAL)
    # logging.getLogger(_).disabled = True  # or use this instead of CRITICAL if you'd rather completely disable it

如果你真的想保留一些记录器,这可以让你灵活地放入你自己的过滤器等。

h7appiyu

h7appiyu4#

你应该知道你要禁用的日志的确切名称。"urllib3.connectionpool" != "urllib3"

logging.getLogger("boto").disabled = True
logging.getLogger("elasticsearch").disabled = True
logging.getLogger("urllib3").disabled = True
logging.getLogger('urllib3.connectionpool').disabled = True

相关问题