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解决字典中的值是列表问题的方法
Mar 04 Python
python计算最小优先级队列代码分享
Dec 18 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
Python API len函数操作过程解析
Mar 05 Python
python绘制雷达图实例讲解
Jan 03 Python
Pytest之测试命名规则的使用
Apr 16 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
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
短信提示使用 特效
2007/01/19 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
node.js实现快速截图
2016/08/27 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
python原始套接字编程示例分享
2014/02/21 Python
详解python开发环境搭建
2016/12/16 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
python爬虫如何解决图片验证码
2021/02/14 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
2013年入党人员的自我鉴定
2013/10/25 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
门卫班长岗位职责
2013/12/15 职场文书
三好学生自我鉴定
2013/12/17 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
公证委托书格式
2014/09/13 职场文书