使用 Python 3.7 添加日志级别
Adding log level with Python 3.7
我一直在尝试通过关注这两个优秀帖子来添加自定义日志级别:
How to add a custom loglevel to Python's logging facility
在我的顶层 __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())
在其他各种 class 和子模块中,我希望我可以:
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)
我没有抛出异常,但也没有打印任何消息。
自我是阻止它工作的原因,因为你似乎不是在 class 内操作。
如果您使用的是 Basic Config,您可以通过这种方式在 __init__.py
或 __main__.py
:
中添加自定义关卡
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")
如果您在所有文件中使用标准记录器,这也适用于其他文件。
我一直在尝试通过关注这两个优秀帖子来添加自定义日志级别:
How to add a custom loglevel to Python's logging facility
在我的顶层 __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())
在其他各种 class 和子模块中,我希望我可以:
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)
我没有抛出异常,但也没有打印任何消息。
自我是阻止它工作的原因,因为你似乎不是在 class 内操作。
如果您使用的是 Basic Config,您可以通过这种方式在 __init__.py
或 __main__.py
:
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")
如果您在所有文件中使用标准记录器,这也适用于其他文件。