从日志记录文档(添加了重点):
定义自己的级别 是可能的,但不是必须的 ,因为现有级别是根据实践经验选择的。但是,如果您确信需要自定义级别,则在执行此操作时应 格外
小心, 如果要开发库,定义自定义级别可能是一个非常糟糕的主意
。这是因为,如果多个库作者都定义了自己的自定义级别,则使用这样的多个库的日志输出可能对使用开发人员难以控制和/或解释,因为给定的数值可能意味着不同的含义用于不同的库。
默认日志记录级别概述:
但是,如果您仍然愿意,可以设置自己的日志级别:
在
logging-module中,
_levelToName并且
_nameToLevel是日志记录名称和级别之间的映射。该
addLevelName()函数无需手动添加到它们,而是为您执行此操作。
在这里,在日志级别 25中 添加了一个称为 MESSAGE 的新日志级别: __
import logging# Define MESSAGE log levelMESSAGE = 25# "Register" new loggin levellogging.addLevelName(MESSAGE, 'MESSAGE') # addLevelName(25, 'MESSAGE')# Verifyassert logging.getLevelName(MESSAGE) == 'MESSAGE'
如果您不想创建自己的记录器类,但仍然希望记录其他日志级别,则可以
Logger.log(level, msg)在传统记录器上使用-method:
logging.log(MESSAGE, 'This is a message')
编辑:直接添加消息
def message(self, msg, *args, **kwargs): if self.isEnabledFor(MESSAGE): self._log(MESSAGE, msg, args, **kwargs)
使
message()-function在
logging以下位置可用:
logging.message = message # or setattr(logging, 'message', message)
使
message()-function在记录器中可用:
logging.Logger.message = message # or setattr(logging.Logger, 'message', message)
制作自定义Logger类
你可以让自己的Logger类作
message(msg)-方法,被用来相若方式的其他人(例如
info(msg),
warning(msg)等)
在以下示例中,使用
message(msg)-method制作了一个新的记录器来记录 MESSAGE :
class MyLogger(logging.Logger): def message(self, msg, *args, **kwargs): if self.isEnabledFor(MESSAGE): self._log(MESSAGE, msg, args, **kwargs)
获取记录器
我不确定什么是使其最佳使用的最佳方法
logging.getLogger(name),但是下面是两种方法。参考 评论,我相信第一种方法更好:
要么 使新的记录器默认的日志记录类,这意味着新的记录情况将是的
MyLogger类而不是默认的
logging.Logger类:
logging.setLoggerClass(MyLogger)logger = logging.getLogger('A new logger name')logger.message('This seems to work')assert isInstance(logger, MyLogger)或者 只是创建记录器的一个实例并将其添加到
loggerDict活动
logging.Manager实例中( EDIT
:不推荐,请参见注释):
my_logger = MyLogger('Foo')logging.Logger.manager.loggerDict['Foo'] = my_loggerlogger = logging.getLogger('Foo')logger.message('This is the same instance as my_logger')assert logger is my_logger使用新的日志级别
# Use the new logger classlogger.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 )



