python 中不同日志级别的不同消息

Different messages for different loglevels in python

我想为我的日志级别输出不同的消息。

对于 DEBUG 和 ERROR,我希望得到这样的输出:

  %(levelname)s %(asctime)s [%(filename)s %(name)s.%(funcName)s - Line %(lineno)s] %(message)s

对于 INFO 和 WARN,我更喜欢这种格式:

%(levelname)s %(asctime)s %(message)s

我已经为每个日志级别设置了一个配置文件,其中包含不同的处理程序,但我得到

这是我的日志记录配置:

[loggers]
keys=root

[handlers]
keys=debugHandler,infoHandler,warnHandler,errorHandler

[formatters]
keys=detailedFormatter,simpleFormatter

[logger_root]
handlers=debugHandler,infoHandler,warnHandler,errorHandler
level=DEBUG

[handler_debugHandler]
class=StreamHandler
level=DEBUG
formatter=detailedFormatter

[handler_infoHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter

[handler_warnHandler]
class=StreamHandler
level=WARN
formatter=simpleFormatter

[handler_errorHandler]
class=StreamHandler
level=ERROR
formatter=detailedFormatter

[formatter_detailedFormatter]
format=%(levelname)s %(asctime)s [%(filename)s %(name)s.%(funcName)s - Line %(lineno)s] %(message)s

[formatter_simpleFormatter]
format=%(levelname)s %(asctime)s %(message)s

如果我有以下示例序列

logging.debug('debug message')
logging.info('info message')
logging.warning('warn message')
logging.error('error message')

我怀疑调试处理程序在每个级别打印,信息处理程序在调用 info 或更高级别时打印,等等。

我的特定格式化程序仅应用于特定级别是否有解决方案?

处理程序应该针对特定的受众(例如支持团队、用户),而不是基于您想要的格式。为此,您需要在此处为​​您的处理程序使用自定义 Formatter 集,它根据日志记录级别使用格式。例如,以下脚本:

import logging

class LevelBasedFormatter(logging.Formatter):
    def format(self, record):
        if record.levelno in (logging.INFO, logging.WARN):
            self._style._fmt = '%(levelname)-8s %(asctime)s %(message)s'
        else:
            self._style._fmt = '%(levelname)-8s %(asctime)s [%(filename)s %(name)s.%(funcName)s - Line %(lineno)s] %(message)s'
        return super().format(record)

logging.basicConfig(level=logging.DEBUG)
logging.getLogger().handlers[0].setFormatter(LevelBasedFormatter())
logging.debug('debug message')
logging.info('info message')
logging.warning('warn message')
logging.error('error message')

打印

DEBUG    2022-04-26 09:25:41,923 [logtest7.py root.<module> - Line 13] debug message
INFO     2022-04-26 09:25:41,923 info message
WARNING  2022-04-26 09:25:41,923 warn message
ERROR    2022-04-26 09:25:41,923 [logtest7.py root.<module> - Line 16] error message