如何在Python的logging模块中撤消logging.disable()命令?

10
在Python内置的强大日志模块中,可以通过调用例如logging.disable(logging.INFO)来禁用所有低于某个级别的日志。
我没有在doc中找到如何重置或撤销此设置。
我的目的是在进行单元测试时禁用和重新启用信息和调试级别的日志,通过在setUp()中调用logging.disable,然后在tearDown()中调用(什么?)。
注:如果我有一个给定的logger实例,我知道如何做到这一点:保持logger.level,将级别设置得更高,然后在tearDown()中将其设置回来。我更希望有一种方式可以静音所有记录器而不必明确选择它们。

你尝试过使用更高的日志级别再次调用logging.disable()吗? - Mike Corcoran
@MikeCorcoran 这样做将禁用更多的日志。我可以尝试禁用(logging.DEBUG),但这将导致调试消息无声。 - gb.
尝试将零传递给logging.disable()。 - Mike Corcoran
1个回答

15

看起来答案是调用logging.disable(logging.NOTSET)

import logging

logger = logging.getLogger('testlog')
handler = logging.FileHandler('\\path\\to\\testlog.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.error("some error occurred")
logger.info('some info msg')
logging.disable(logging.ERROR)
logger.info('another info msg')
logging.disable(logging.NOTSET)
logger.info('last info msg')

输出结果为日志文件:

2012-05-17 11:09:24,441 ERROR some error occurred
2012-05-17 11:09:24,443 INFO some info msg
2012-05-17 11:09:24,443 INFO last info msg

谢谢。文档中似乎缺少这个信息。 - gb.
1
我编辑了答案,使用常量logging.NOTSET而不是神奇的“0”。 - gb.
事实上,我的问题是 https://dev59.com/rGw05IYBdhLWcg3w6GAw 的重复,该问题有正确的答案。没有找到任何“标记为重复”的按钮,也许我没有足够的声望或徽章... - gb.
2
关于这个问题,我已经在bugs.python.org上提交了一个文档错误报告,并且在不到一小时的时间内就得到了修复,所以下次有人遇到这个问题时,我们可以直接引导他们查看官方文档。 - gb.
请参见 http://meta.stackexchange.com/questions/118124/where-on-earth-is-the-mark-as-duplicate-ui-on-stack-overflow 以了解在 Stack Overflow 上标记为重复的界面。 - Bae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接