From 记录文档(强调):
定义自己的级别是可能的,但应该不是必要的, 作为
现有水平是根据实际情况选择的
经验。但是,如果您确信需要自定义级别,
这样做时应格外小心,并且这可能是一个
如果您正在开发库,则定义自定义级别是非常糟糕的主意。
那是因为如果多个库作者都定义了自己的自定义
级别,有可能来自这样多个的日志输出
一起使用的库对于使用开发人员来说将很难
控制和/或解释,因为给定的数值可能意味着
不同的图书馆有不同的东西。
默认概述日志记录级别:
但如果您仍然愿意,您可以设置自己的日志级别:
In the logging
-模块,_levelToName
and _nameToLevel
是日志名称和级别之间的映射。无需手动添加,addLevelName()
函数会为你做这件事。
这里,一个新的日志记录级别称为MESSAGE添加了日志级别25:
import logging
# Define MESSAGE log level
MESSAGE = 25
# "Register" new loggin level
logging.addLevelName(MESSAGE, 'MESSAGE') # addLevelName(25, 'MESSAGE')
# Verify
assert logging.getLevelName(MESSAGE) == 'MESSAGE'
如果您不想创建自己的记录器类但仍想记录其他日志级别,那么您可以使用Logger.log(level, msg)
-传统记录器上的方法:
logging.log(MESSAGE, 'This is a message')
编辑:直接添加消息
def message(self, msg, *args, **kwargs):
if self.isEnabledFor(MESSAGE):
self._log(MESSAGE, msg, args, **kwargs)
使message()
- 可用功能logging
:
logging.message = message
# or setattr(logging, 'message', message)
使message()
-记录器中可用的功能:
logging.Logger.message = message
# or setattr(logging.Logger, 'message', message)
制作自定义 Logger 类
您可以创建自己的记录器类来制作message(msg)
- 方法,与其他方法类似地使用(例如info(msg)
, warning(msg)
, etc.)
在下面的示例中,一个新的记录器是用message(msg)
- 记录方法MESSAGE:
class MyLogger(logging.Logger):
def message(self, msg, *args, **kwargs):
if self.isEnabledFor(MESSAGE):
self._log(MESSAGE, msg, args, **kwargs)
获取记录器
我不确定让它工作的最佳方法是什么logging.getLogger(name)
,但下面有两种方法。
参考号评论,我相信第一种方法更好:
Either使新记录器成为默认记录类,这意味着新记录器实例将属于MyLogger
类而不是默认类logging.Logger
class:
logging.setLoggerClass(MyLogger)
logger = logging.getLogger('A new logger name')
logger.message('This seems to work')
assert isInstance(logger, MyLogger)
Or只需创建一个记录器实例并将其添加到loggerDict
在活跃的logging.Manager
实例 (EDIT:不推荐,见评论):
my_logger = MyLogger('Foo')
logging.Logger.manager.loggerDict['Foo'] = my_logger
logger = logging.getLogger('Foo')
logger.message('This is the same instance as my_logger')
assert logger is my_logger
使用新的日志级别
# Use the new logger class
logger.warning('Custom log levels might be a bad idea')
logger.message('Here is a message')
# Log with custom log level:
logger.log(MESSAGE, 'This is a message')
这假设MESSAGE
被预定义为表示日志级别的整数数值。 (例如。25就像之前提到的)