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
我已经为每个日志级别设置了一个配置文件,其中包含不同的处理程序,但我得到
- 1 条调试消息
- 2 条信息消息
- 3条警告信息
- 4条错误信息
这是我的日志记录配置:
[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
我想为我的日志级别输出不同的消息。
对于 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
我已经为每个日志级别设置了一个配置文件,其中包含不同的处理程序,但我得到
- 1 条调试消息
- 2 条信息消息
- 3条警告信息
- 4条错误信息
这是我的日志记录配置:
[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