gpt4 book ai didi

StreamHandler 上的 Python setLevel 不起作用

转载 作者:太空狗 更新时间:2023-10-30 03:06:19 25 4
gpt4 key购买 nike

我有如下设置日志记录:

def setUp():

LOG_FORMAT = '%(asctime)s %(levelname)-8s %(name)s %(message)s'
#LOG_FORMAT = '%(asctime)s %(name)s %(message)s'

logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
formatter = logging.Formatter(LOG_FORMAT)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
ch.setFormatter(formatter)
logging.getLogger().addHandler(ch)

LOG_FILENAME = 'file.log'
fh = logging.FileHandler(LOG_FILENAME, 'w')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logging.getLogger().addHandler(fh)

但是,控制台仍然显示 DEBUG 消息。我在这里遗漏了什么吗?

请注意,在 fh 上将级别设置为 ERROR 可以正常工作。

最佳答案

我认为您需要删除对 logging.basicConfig 的调用。该函数添加了另一个 logging.StreamHandler,它可能正在打印您不想打印的消息。

要检查这一点,您可以查看根记录器的 handlers 属性(这是一个包含所有正在使用的处理程序的列表)并验证有多少 logging.StreamHandlers 有。此外,由于两个 logging.StreamHandler,可能会将级别设置为 logging.ERROR 的消息打印两次。

如果您要在代码中显式配置处理程序,我的最终建议是避免使用 logging.basicConfig

编辑:为了完整起见,logging.BasicConfig 的源代码如下:

if len(root.handlers) == 0:
filename = kwargs.get("filename")
if filename:
mode = kwargs.get("filemode", 'a')
hdlr = FileHandler(filename, mode)
else:
stream = kwargs.get("stream")
hdlr = StreamHandler(stream)
fs = kwargs.get("format", BASIC_FORMAT)
dfs = kwargs.get("datefmt", None)
fmt = Formatter(fs, dfs)
hdlr.setFormatter(fmt)
root.addHandler(hdlr)
level = kwargs.get("level")
if level is not None:
root.setLevel(level)

您可以看到,除非传递 filename,否则会创建一个 logging.StreamHandler

关于StreamHandler 上的 Python setLevel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8809881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com