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实现巡检系统(solaris)示例
Apr 02 Python
Python装饰器decorator用法实例
Nov 10 Python
Python中的ceil()方法使用教程
May 14 Python
python函数装饰器用法实例详解
Jun 04 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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 广告点击统计代码(php+mysql)
2018/02/21 PHP
php微信开发之关注事件
2018/06/14 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
python删除过期log文件操作实例解析
2018/01/31 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
Python requests库用法实例详解
2018/08/14 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python实现简单名片管理系统
2018/11/30 Python
python按比例随机切分数据的实现
2019/07/11 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
神路信息Java面试题目
2013/03/31 面试题
个人应聘自我评价分享
2013/11/18 职场文书
初一体育教学反思
2014/01/29 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
党员承诺践诺书
2014/05/20 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
介绍信格式样本
2015/05/05 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Python 中random 库的详细使用
2021/06/03 Python
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript