gpt4 book ai didi

python.logging : Why does my non-basicConfig setting not work?

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:04 24 4
gpt4 key购买 nike

我想从主模块和所有子模块记录到一个日志文件。

从我定义记录器的主文件发送的日志消息按预期工作。但是从对导入函数的调用发送的那些丢失了。

如果我像下面的示例 1 那样使用 logging.basicConfig,它就会工作。但是允许更多自定义设置的第二个示例不起作用。

有什么想法吗?

# in the submodule I have this code
import logging
logger = logging.getLogger(__name__)

示例 1 - 工作

这里我创建了两个处理程序并将它们传递给 basicConfig:

# definition of root looger in main module

formatter = logging.Formatter(fmt="%(asctime)s %(name)s.%(levelname)s: %(message)s", datefmt="%Y.%m.%d %H:%M:%S")

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)

handler2 = logging.StreamHandler(stream=None)
handler2.setFormatter(formatter)
handler2.setLevel(logging.DEBUG)

logging.basicConfig(handlers=[handler, handler2], level=logging.DEBUG)
logger = logging.getLogger(__name__)

示例 2 - 不工作

这里我创建了两个处理程序并将它们addHandler() 到根记录器:

# definition of root looger in main module

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
#handler.setLevel(logging.ERROR)
logger.addHandler(handler)

handler = logging.StreamHandler(stream=None)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)

最佳答案

您需要在软件的主模块中配置(唯一的)根记录器。这是通过调用

logger = logging.getLogger() #without arguments

代替

logger = logging.getLogger(__name__)

(Python doc on logging)

第二个示例使用您的脚本名称创建一个单独的子记录器。

如果子模块中没有定义处理程序,则日志消息将传递给根记录器进行处理。

相关问题可以在这里找到: Python Logging - How to inherit root logger level & handler

关于python.logging : Why does my non-basicConfig setting not work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125808/

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