首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python.logging:为什么我的非基本配置设置不起作用?

python.logging:为什么我的非基本配置设置不起作用?
EN

Stack Overflow用户
提问于 2018-07-02 02:12:04
回答 1查看 2K关注 0票数 2

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

从主文件(我在其中定义记录器)发送的日志消息按预期工作。但是,从对导入函数的调用中发送的参数将丢失。

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

你知道为什么吗?

代码语言:javascript
复制
# in the submodule I have this code
import logging
logger = logging.getLogger(__name__)

示例1-工作

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

代码语言:javascript
复制
# 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()到根记录器:

代码语言:javascript
复制
# 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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 04:00:04

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

代码语言:javascript
复制
logger = logging.getLogger() #without arguments

而不是

代码语言:javascript
复制
logger = logging.getLogger(__name__)

(Python doc on logging)

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

如果在子模块中没有定义处理程序,日志消息将向下传递到根记录器来处理它。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51125808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档