python中的colorlog库使用详解


Posted in Python onJuly 05, 2019

一. 描述

colorlog.ColoredFormatter是一个Python logging模块的格式化,用于在终端输出日志的颜色

二. 安装

pip install colorlog

三. 用法

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
  • reset:隐性的添加一个颜色重置代码到消息输出,除非输出已经结束。默认为True
  • log_colors:记录级别名称到颜色名称的一个映射。可以在colorlog.default_log_colors或下面的例子中找到默认值
  • secondary_log_colors:颜色名称到log_colors样式映射的映射,可以在格式化字符串中使用其定义的其他颜色。 请参考下面的示例
  • style:在python3.2以以上可用。见logging.Formatter

可以向格式化字符串中添加参数,根据日志级别选择颜色转义码:

  • log_color:返回与日志级别关联的颜色
  • <name>_log_color:如果格式化中配置了辅助颜色,则根据日志级别返回另一种颜色(请参考下面的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 and white

四. 实例

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='%'
)

2. 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'
  }
 }
)

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 相关文章推荐
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
Python制作数据导入导出工具
Jul 31 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
浅谈Python的垃圾回收机制
Dec 17 Python
Python 文件操作的详解及实例
Sep 18 Python
python如何读写json数据
Mar 21 Python
python使用epoll实现服务端的方法
Oct 16 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
python中提高pip install速度
Feb 14 Python
Python3运算符常见用法分析
Feb 14 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 #Python
用Python实现将一张图片分成9宫格的示例
Jul 05 #Python
python获取txt文件词向量过程详解
Jul 05 #Python
Python 的字典(Dict)是如何存储的
Jul 05 #Python
关于Python 的简单栅格图像边界提取方法
Jul 05 #Python
Python3+Appium安装使用教程
Jul 05 #Python
Python叠加两幅栅格图像的实现方法
Jul 05 #Python
You might like
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
xtree.js 代码
2007/03/13 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python内存映射文件读写方式
2020/04/24 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
自动化专业本科毕业生求职信
2013/10/20 职场文书
敬老院标语
2014/06/27 职场文书
个人学习总结范文
2015/02/15 职场文书
教师求职自荐信范文
2015/03/04 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
如何在C++中调用Python
2021/05/21 Python
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技