我想为我的应用程序使用loglevel TRACE(5),因为我认为这debug()还不够。另外log(5, msg)不是我想要的。如何将自定义日志级别添加到Python记录器?
debug()
log(5, msg)
我有mylogger.py以下内容:
mylogger.py
import logging @property def log(obj): myLogger = logging.getLogger(obj.__class__.__name__) return myLogger
在我的代码中,我通过以下方式使用它:
class ExampleClass(object): from mylogger import log def __init__(self): '''The constructor with the logger''' self.log.debug("Init runs")
现在我想打电话 self.log.trace("foo bar")
self.log.trace("foo bar")
在此先感谢您的帮助。
编辑 (2016年12月8日):我[pfa的)可接受答案更改为IMHO,这是基于Eric S的非常好的建议的出色解决方案。
@Eric S.
Eric S.的回答很好,但是我通过实验得知,这将始终导致打印以新的调试级别记录的消息,而不管日志级别设置为什么。因此,如果您将的新级别号码设置为9,如果您致电setLevel(50),则会错误地打印 较低级别的 消息。
9
setLevel(50)
为了防止这种情况的发生,您需要在“ debugv”函数内的另一行检查是否实际启用了相关日志记录级别。
固定示例检查是否启用了日志记录级别:
import logging DEBUG_LEVELV_NUM = 9 logging.addLevelName(DEBUG_LEVELV_NUM, "DEBUGV") def debugv(self, message, *args, **kws): if self.isEnabledFor(DEBUG_LEVELV_NUM): # Yes, logger takes its '*args' as 'args'. self._log(DEBUG_LEVELV_NUM, message, args, **kws) logging.Logger.debugv = debugv
如果您查看Python 2.7的class Loggerin代码logging.__init__.py,这就是所有标准日志功能(.critical,.debug等)的功能。
class Logger
logging.__init__.py
我显然不能发表因缺乏声誉而对其他人的回答的回复…希望埃里克(Eric)会在看到这一点后更新他的帖子。=)