相关疑难解决方法(0)

如何将自定义日志级别添加到Python的日志记录工具中

我想为我的应用程序提供loglevel TRACE(5),因为我认为这debug()还不够.另外log(5, msg)不是我想要的.如何将自定义日志级别添加到Python记录器?

我有mylogger.py以下内容:

import logging

@property
def log(obj):
    myLogger = logging.getLogger(obj.__class__.__name__)
    return myLogger
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我以下列方式使用它:

class ExampleClass(object):
    from mylogger import log

    def __init__(self):
        '''The constructor with the logger'''
        self.log.debug("Init runs")
Run Code Online (Sandbox Code Playgroud)

现在我想打个电话 self.log.trace("foo bar")

在此先感谢您的帮助.

编辑(2016年12月8日):我改变了接受pfa的答案,即恕我直言,这是一个很好的解决方案,基于Eric S.的非常好的建议.

python logging python-logging

102
推荐指数
10
解决办法
4万
查看次数

使用 Python 3.7 添加日志级别

我一直在尝试通过以下两个优秀的帖子来添加自定义日志级别:

如何向 Python 的日志记录工具添加自定义日志级别

Python3添加日志级别

在我的顶层 __init__.py 中,我放置了:

    import logging

    logging.VERBOSE = 15 
    logging.addLevelName(logging.VERBOSE, "VERBOSE")

    def verbose(self, message, *args, **kws):
        if self.isEnabledFor(logging.VERBOSE):
            # Yes, logger takes its '*args' as 'args'.
            self._log(logging.VERBOSE, message, args, **kws) 

    setattr(logging, 'verbose', verbose)
    setattr(logging.Logger, 'verbose',verbose)
#also tried
# logging.Logger.verbose=verbose
# logging.verbose=verbose

logging.getLogger(__name__).addHandler(logging.NullHandler())
Run Code Online (Sandbox Code Playgroud)

在其他各种类和子模块中,我希望我可以:

import logging
.
.
.
logging.verbose("Someone sent us up the bomb")
Run Code Online (Sandbox Code Playgroud)

但是,让我感动的是:

TypeError: verbose() missing 1 required positional argument: 'message'
Run Code Online (Sandbox Code Playgroud)

如果我切换到:

logging.log(logging.VERBOSE, "Intent Returned: " + intent_name)
Run Code Online (Sandbox Code Playgroud)

我没有抛出异常,但也没有打印任何消息。

logging python-3.7

1
推荐指数
1
解决办法
3411
查看次数

标签 统计

logging ×2

python ×1

python-3.7 ×1

python-logging ×1