Python日志:禁用后的反效应

11 投票
2 回答
1290 浏览
提问于 2025-04-16 22:55

根据日志记录文档,调用logging.disable(lvl)这个方法可以“暂时降低整个应用程序的日志输出”,但我找不到“暂时”这个意思。举个例子,看看下面这个脚本:

import logging
logging.disable(logging.CRITICAL)
logging.warning("test")
# Something here
logging.warning("test")

到目前为止,我还没有找到可以让Something here重新启用整个日志系统的方法,这样第二个warning就能被记录下来。有没有什么方法可以反向操作disable()

2 个回答

2

根据@unutbu的回答,我创建了一个上下文管理器:

import logging
log = logging.getLogger(__name__)

class SuppressLogging:
    """
    Context handler class that suppresses logging for some controlled code.
    """

    def __init__(self, loglevel):
        logging.disable(loglevel)
        return

    def __enter__(self):
        return 

    def __exit__(self, exctype, excval, exctraceback):
        logging.disable(logging.NOTSET)
        return False

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    log.info("log this")
    with SuppressLogging(logging.WARNING):
        log.info("don't log this")
        log.warning("don't log this warning")
        log.error("log this error while up to WARNING suppressed")
    log.info("log this again")
18
logging.disable(logging.NOTSET)    

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

撰写回答