gpt4 book ai didi

python - 为什么此自定义记录器不将信息记录到控制台和文件?

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:23 25 4
gpt4 key购买 nike

我在 my_logging.py 中定义了一个记录器函数:

def my_logger(name):
print("warn:", name)
logger = logging.getLogger(name)

# Create handlers
c_handler = logging.StreamHandler()
f_handler = logging.FileHandler('logs/demo.log')
c_handler.setLevel(logging.INFO)
f_handler.setLevel(logging.INFO)

# Create formatters and add it to handlers
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
f_handler.setFormatter(f_format)

# Add handlers to the logger
logger.addHandler(c_handler)
logger.addHandler(f_handler)

return logger

然后我在 test.py 中使用它:

import my_logging

logger = my_logging.my_logger(__name__)

logger.info("This is a test!")

根本不记录!我想将记录器放入一个函数中的原因是因为我希望它在多个模块中使用,使用相同的日志配置。

这里有什么问题吗?我测试了一下,似乎与处理程序的 setLevel() 方法有关。 logging.INFO 没有效果。

最佳答案

setLevel() 的文档中您可以看到根记录器使用 WARRING 级别,并且可能会阻止处理程序中的 INFO 级别。

您必须为根记录器设置INFO级别

logger = logging.getLogger(name)

logger.setLevel(logging.INFO)

如果您还需要 DEBUG 消息,那么您必须为根记录器和处理程序设置 DEBUG 级别。

logger.setLevel(logging.DEBUG)

c_handler.setLevel(logging.DEBUG)
f_handler.setLevel(logging.DEBUG)

使用不同级别的处理程序,您可以仅在屏幕上或仅向文件发送调试消息。

关于python - 为什么此自定义记录器不将信息记录到控制台和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895463/

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