我在项目中使用了几个模块,但是,模块会从记录器中输出大量日志,这很烦人。所以我通过以下方式关闭日志:
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)
虽然这有效,但代码看起来很冗长。有没有更好,更简单的方法可以做到这一点?
答案 0 :(得分:5)
可能你可以重构它以削减一些样板:
for _ in ("boto", "elasticsearch", "urllib3"):
logging.getLogger(_).setLevel(logging.CRITICAL)
答案 1 :(得分:5)
您可以使用logging.config.dictConfig
或logging.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
答案 2 :(得分:0)
您应该确切知道应该禁用的记录器名称。 "urllib3.connectionpool" != "urllib3"
。
logging.getLogger("boto").disabled = True
logging.getLogger("elasticsearch").disabled = True
logging.getLogger("urllib3").disabled = True
logging.getLogger('urllib3.connectionpool').disabled = True
答案 3 :(得分:0)
您可以从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
如果您确实希望保留一些记录器,则可以灵活地放入自己的过滤器等。