Python colorlog库:终端彩色日志格式化详解

慢慢来
慢慢来
发布时间:2026-10-13 | 4人浏览过
原创

本文详解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')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表