【发布时间】:2011-02-10 13:48:07
【问题描述】:
嗨
我想用我自己的方法扩展我的记录器(由 logging.getLogger("rrcheck") 获取),例如:
def warnpfx(...):
如何做到最好?
我最初的愿望是让根记录器将所有内容写入文件并另外命名记录器(“rrcheck”)写入标准输出,但后者还应该有一些其他方法和级别。我需要它来添加一些带有“!PFXWRN”前缀的消息(但只有那些进入标准输出的消息)并保持其他消息不变。我还想为 root 和命名记录器单独设置日志记录级别。
这是我的代码:
class CheloExtendedLogger(logging.Logger):
"""
Custom logger class with additional levels and methods
"""
WARNPFX = logging.WARNING+1
def __init__(self, name):
logging.Logger.__init__(self, name, logging.DEBUG)
logging.addLevelName(self.WARNPFX, 'WARNING')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter("%(asctime)s [%(funcName)s: %(filename)s,%(lineno)d] %(message)s")
console.setFormatter(formatter)
# add the handlers to logger
self.addHandler(console)
return
def warnpfx(self, msg, *args, **kw):
self.log(self.WARNPFX, "! PFXWRN %s" % msg, *args, **kw)
logging.setLoggerClass(CheloExtendedLogger)
rrclogger = logging.getLogger("rrcheck")
rrclogger.setLevel(logging.INFO)
def test():
rrclogger.debug("DEBUG message")
rrclogger.info("INFO message")
rrclogger.warnpfx("warning with prefix")
test()
这是一个输出 - 函数和 lilne 编号是错误的:warnpfx 而不是 test
2011-02-10 14:36:51,482 [test: log4.py,35] INFO message
2011-02-10 14:36:51,497 [warnpfx: log4.py,26] ! PFXWRN warning with prefix
也许我自己的记录器方法不是最好的?
您建议走哪个方向(自己的记录器、自己的处理程序、自己的格式化程序等)?
如果我想要另一个记录器,如何进行?
不幸的是,记录无法注册自己的记录器,因此 getLogger(name) 将需要一个...
问候,
兹比格纽
【问题讨论】: