Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 使用Python 3.7添加日志级别_Logging_Python 3.7 - Fatal编程技术网

Logging 使用Python 3.7添加日志级别

Logging 使用Python 3.7添加日志级别,logging,python-3.7,Logging,Python 3.7,我一直在尝试通过以下两篇优秀文章添加自定义日志级别: 在我的顶层_uinit__; py中,我将: import logging logging.VERBOSE = 15 logging.addLevelName(logging.VERBOSE, "VERBOSE") def verbose(self, message, *args, **kws): if self.isEnabledFor(logging.VERBOSE):

我一直在尝试通过以下两篇优秀文章添加自定义日志级别:

在我的顶层_uinit__; 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())
在各种其他类和子模块中,我希望我可以:

import logging
.
.
.
logging.verbose("Someone sent us up the bomb")
但是,让我感动的是:

TypeError: verbose() missing 1 required positional argument: 'message'
如果我切换到:

logging.log(logging.VERBOSE, "Intent Returned: " + intent_name)

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

自我是阻止它工作的原因,因为它似乎不是从类内部操作的

如果您正在使用,您可以通过这种方式在
\uuuu init\uuuuuuuuuuuuuuupy
\uuuuuuuu main\uuuuuuuuuuuuuuuuuupy
中添加自定义级别:

import logging
log_level = 15  

logging.basicConfig(
    level=int(log_level),
    format="%(asctime)s [%(threadName)-12.12s] [%(levelname)-7.7s]  %(message)s",
    handlers=[
        logging.FileHandler('put your log path here'),
        logging.StreamHandler()
    ]
)

def verbose(msg, *args, **kwargs):
    if logging.getLogger().isEnabledFor(15):
        logging.log(15, msg)

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

# now try the new level
logging.verbose("This is verbose logging")

如果您在所有文件中使用标准记录器,这也适用于其他文件。

关键部分是在对log()的公共调用中省略args和**kwargs。可以放入基本init文件并使其在项目中任何位置工作的绝对最小代码是:
import logging logging.getLogger(\uuu name\uuuu).addHandler(logging.NullHandler())logging.VERBOSE=15 logging.addLevelName(logging.VERBOSE,“VERBOSE”)def VERBOSE(message,*args,**kws):if logging.getLogger().isenablefor(logging.VERBOSE):#是的,记录器将其“*args”作为“args”。logging.log(logging.VERBOSE,message)logging.VERBOSE=VERBOSE