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程序设计入门(2)变量类型简介
Jun 16 Python
python求众数问题实例
Sep 26 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
浅析python redis的连接及相关操作
Nov 07 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
Django中使用MySQL5.5的教程
Dec 18 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
浅析Python迭代器的高级用法
Jul 16 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
Python的collections模块真的很好用
Mar 01 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
如何实现JS函数的重载
2006/09/22 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python中__slots__用法实例
2015/06/04 Python
Python循环语句中else的用法总结
2016/09/11 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
如何在Python对Excel进行读取
2020/06/04 Python
如何对python的字典进行排序
2020/06/19 Python
英国著名书店:Foyles
2018/12/01 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
药剂专业学生求职信范文
2013/12/28 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
先进教师事迹材料
2014/12/16 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android