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中sets模块的用法实例
Sep 30 Python
Python操作MySQL简单实现方法
Jan 26 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
python使用tkinter实现简单计算器
Jan 30 Python
Python实现最常见加密方式详解
Jul 13 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
python爬虫用mongodb的理由
Jul 28 Python
教你怎么用Python操作MySql数据库
May 31 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php中对2个数组相加的函数
2011/06/24 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP面向对象精要总结
2014/11/07 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
python设置环境变量的作用和实例
2019/07/09 Python
高中自我鉴定
2013/12/20 职场文书
记者岗位职责
2014/01/06 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
房屋所有权证明
2014/10/20 职场文书
团日活动总结格式
2015/05/11 职场文书
毕业论文致谢范文
2015/05/14 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Golang 并发下的问题定位及解决方案
2022/03/16 Golang