Python colorlog库:终端彩色日志格式化详解
本文详解Python colorlog库中ColoredFormatter类的用法,涵盖安装、核心参数(format、log_colors等)、颜色转义码语法及secondary_log_colors的高级配置,并提供dictConfig、fileConfig及自定义日志级别的完整代码示例。
colorlog库概述与安装
一. 描述
colorlog.ColoredFormatter是Python标准logging模块中的一个格式化类,专门用于在终端输出带有颜色的日志信息,以提升可读性。
二. 安装
pip install colorlog
ColoredFormatter核心参数详解
三. 用法
import colorlog
handler = colorlog.StreamHandler()
handler.setFormatter(colorlog.ColoredFormatter(
'%(log_color)s%(levelname)s:%(name)s:%(message)s'))
logger = colorlog.getLogger('example')
logger.addHandler(handler)
ColoredFormatter类支持以下参数配置:
- format:指定日志输出的格式化字符串,此为必填项。
- datefmt:可选的日期格式字符串,直接传递给基类logging.Formatter,具体用法可参考logging.Formatter文档。
- reset:默认为True,表示在消息输出结束时自动添加颜色重置代码;若设为False,则不自动添加。
- log_colors:一个字典,将日志级别名称映射到颜色名称。默认值可在colorlog.default_log_colors中查看,或参考下文示例。
- secondary_log_colors:一个嵌套字典,将颜色名称映射到log_colors样式的映射表,允许在格式化字符串中定义并使用额外的颜色属性。具体用法请参考下文示例。
- style:在Python 3.2及以上版本中可用,具体行为请参考logging.Formatter的相关说明。
格式化字符串中的颜色转义码
在格式化字符串中,可以根据日志级别插入特定的颜色转义码参数:
- log_color:返回与当前日志级别关联的颜色代码。
- <name>_log_color:如果格式化配置中定义了secondary_log_colors,则此参数可根据日志级别返回另一种颜色(具体用法见secondary_log_colors示例)。
在配置日志级别颜色时,可以使用逗号连接多个转义码(但不能直接在格式字符串中书写逗号),例如“black,bg_white”表示在白色背景上显示黑色文本。
以下是格式化字符串中可用的具体格式说明:
- {color}、fg_{color}、bg_{color}:分别用于设置前景色和背景色。
- bold、bold_{color}、fg_bold_{color}、bg_bold_{color}:用于设置粗体或明亮效果的颜色。
- reset:清除所有已应用的格式,包括前景色和背景色。
支持的颜色名称包括:black、red、green、yellow、blue、purple、cyan和white。
ColoredFormatter实战示例
四. 实例
基本用法与默认配置
1. ColoredFormatter基本用法
以下代码演示了如何使用默认参数创建用于logging设置的ColoredFormatter实例。
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
"%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s",
datefmt=None,
reset=True,
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
},
secondary_log_colors={},
style='%'
)
secondary_log_colors高级配置
2. secondary_log_colors的使用
辅助日志颜色(secondary_log_colors)提供了一种根据日志级别选择多种颜色的方法。secondary_log_colors中的每个键都会添加一个可在格式化字符串中使用的属性(例如消息变为message_log_color),其对应值的格式与log_colors参数相同。
以下示例展示了如何使用默认日志颜色突出显示级别名称,并以红色突出显示ERROR和CRITICAL级别的日志信息。
from colorlog import ColoredFormatter
formatter = ColoredFormatter(
"%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s",
secondary_log_colors={
'message': {
'ERROR': 'red',
'CRITICAL': 'red'
}
}
)
dictConfig与fileConfig配置示例
3. dictConfig的使用
logging.config.dictConfig({
'formatters': {
'colored': {
'()': 'colorlog.ColoredFormatter',
'format': "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s"
}
},
...
})
一个完整的配置示例请参考tests/test_colorlog.py文件。
4. fileConfig的使用
[loggers]
keys=root
[logger_root]
handlers=stream
level=DEBUG
[formatters]
keys=color
[formatter_color]
class=colorlog.ColoredFormatter
format=%(log_color)s%(levelname)s:%(name)s:%(message)s:test_config.ini
datefmt=%H:%M:%S
[handlers]
keys=stream
[handler_stream]
class=StreamHandler
formatter=color
args=()
任何配置了颜色格式的渠道,都可以使用通过上述参数构造的ColoredFormatter实例进行初始化。
一个完整的配置文件示例请参考test/test_config.ini。
自定义日志级别配置
5. 自定义日志级别的使用
ColoredFormatter支持使用logging.addLevelName添加自定义的日志级别,并为其配置特定颜色。
import logging, colorlog
TRACE = 5
logging.addLevelName(TRACE, 'TRACE')
formatter = colorlog.ColoredFormatter(log_colors={'TRACE': 'yellow'})
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger = logging.getLogger('example')
logger.addHandler(handler)
logger.setLevel('TRACE')
logger.log(TRACE, 'a message using a custom level')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









