【发布时间】:2009-10-16 23:04:28
【问题描述】:
我正在尝试使用 python 日志记录模块来做复杂的事情。我将保留此设计的动机,因为它会大大延长帖子,但我需要有一个根记录器,它为我们的代码和使用日志记录的库发送常规日志文件 - 以及其他记录器的集合不同的日志文件。
整体设置应如下所示。在这个例子中,我将尽一切努力简化代码。
import logging, sys
root = logging.getLogger('')
top = logging.getLogger('top')
bottom = logging.getLogger('top.bottom')
class KillFilter(object):
def filter(self, msg):
return 0
root_handler = logging.StreamHandler(sys.stdout)
top_handler = logging.StreamHandler(sys.stdout)
bottom_handler = logging.StreamHandler(sys.stdout)
root_handler.setFormatter(logging.Formatter('ROOT'))
top_handler.setFormatter(logging.Formatter('TOP HANDLER'))
bottom_handler.setFormatter(logging.Formatter("BOTTOM HANDLER"))
msg_killer = KillFilter()
root.addHandler(root_handler)
top.addHandler(top_handler)
bottom.addHandler(bottom_handler)
top.addFilter(msg_killer)
root.error('hi')
top.error('hi')
bottom.error('hi')
这个输出
ROOT
BOTTOM HANDLER
ROOT
第二个根处理程序调用不应该,因为根据日志记录文档,msg_killer 将阻止消息到达根记录器。显然,文档可以改进。
编辑:删除了我对 python 日志记录的“当下”苛刻的话。
【问题讨论】: