【发布时间】:2018-12-10 01:40:29
【问题描述】:
我想从主模块和所有子模块记录到单个日志文件。
从我定义记录器的主文件发送的日志消息按预期工作。但是从调用发送到导入函数的那些丢失了。
如果我像下面的示例 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)
【问题讨论】:
-
示例 2 确实 对我有用(如果我从第一行复制您的
formatter = logging.Formatter(...)行)。这个项目还有其他可能会影响事情的地方吗? -
你真的可以在日志文件和控制台中看到
module1.DEBUG: test吗?我不确定还有什么可能导致问题。我将这个从我的项目归结为一个仍然显示行为的最小工作示例。我的第一个想法是我在logging的单例事情上做错了。 -
你在调用什么来生成日志条目?
logging.warn()或logger.warn(),您应该使用logger(其中warn()只是任何日志记录方法(信息、调试等)的占位符。 -
是的,我正在使用
logger.debug('test')。刚测试logging.debug('test'),也没有出现。 -
你能显示你的根记录器配置吗?
标签: python python-3.x logging