Python 根据日志级别打印不同颜色的日志的方法示例


Posted in Python onAugust 08, 2019

本文介绍了Python 根据日志级别打印不同颜色的日志的方法示例,分享给大家,具体如下:

# -*-coding:UTF-8-*-
import logging
import os
import time
 
 
class logger(object):
  
  """
  终端打印不同颜色的日志,在pycharm中如果强行规定了日志的颜色, 这个方法不会起作用, 但是
  对于终端,这个方法是可以打印不同颜色的日志的。
  """ 
 
  #在这里定义StreamHandler,可以实现单例, 所有的logger()共用一个StreamHandler
  ch = logging.StreamHandler()
  def __init__(self):
    self.logger = logging.getLogger()
    if not self.logger.handlers:
      #如果self.logger没有handler, 就执行以下代码添加handler
      self.logger.setLevel(logging.DEBUG)
      from serviceProgram.utils.FileUtil import FileUtil
      rootPath = FileUtil.getProgrameRootPath()
      self.log_path = rootPath + '/logs'
      if not os.path.exists(self.log_path):
        os.makedirs(self.log_path)
 
      # 创建一个handler,用于写入日志文件
      fh = logging.FileHandler(self.log_path + '/runlog' + time.strftime("%Y%m%d", time.localtime()) + '.log', encoding='utf-8')
      fh.setLevel(logging.INFO)
 
      # 定义handler的输出格式
      formatter = logging.Formatter('[%(asctime)s] - [%(levelname)s] - %(message)s')
      fh.setFormatter(formatter)
 
      # 给logger添加handler
      self.logger.addHandler(fh)
 
  def debug(self, message):
    self.fontColor('\033[0;32m%s\033[0m')
    self.logger.debug(message)
 
  def info(self, message):
    self.fontColor('\033[0;34m%s\033[0m')
    self.logger.info(message)
 
  def warning(self, message):
    self.fontColor('\033[0;37m%s\033[0m')
    self.logger.warning(message)
 
  def error(self, message):
    self.fontColor('\033[0;31m%s\033[0m')
    self.logger.error(message)
 
  def critical(self, message):
    self.fontColor('\033[0;35m%s\033[0m')
    self.logger.critical(message)
 
  def fontColor(self, color):
    #不同的日志输出不同的颜色
    formatter = logging.Formatter(color % '[%(asctime)s] - [%(levelname)s] - %(message)s')
    self.ch.setFormatter(formatter)
    self.logger.addHandler(self.ch)
 
 
if __name__ == "__main__":
  logger = logger()
  logger.info("12345")
  logger.debug("12345")
  logger.warning("12345")
  logger.error("12345")

实现过程:

终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。

转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。

书写格式:

开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m

注意:开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于

表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统

都能识别;但是,建议按照默认的格式规范书写。

对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。

数值表示的参数含义:

常见开头格式:

  • \033[0m            默认字体正常显示,不高亮
  • \033[32;0m       红色字体正常显示
  • \033[1;32;40m  显示方式: 高亮    字体前景色:绿色  背景色:黑色
  • \033[0;31;46m  显示方式: 正常    字体前景色:红色  背景色:青色

实例:

(1)print("\033[1;31;40m您输入的帐号或密码错误!\033[0m")  

上方代码的输出格式为:字体高亮,红色前景,黄色背景      PS:前景色也就是字体的颜色

(2)print("\033[0;31m%s\033[0m" % "输出红色字符")

#上方代码的输出格式为:字体默认,红色前景

LOG_INFO='INFO'
LOG_ERROR='ERROR'
LOG_WARNING='WARNING'
LOG_NOTIFY='NOTIFY'
LOG_DEBUG='DEBUG'
LOG_USER='USER'
 
def info_log(value):
  if log_level > 3:
    print("\033[0;37;40m%s\033[0m"%value)
 
def error_log(value):
  if log_level != 0:
    print("\033[0;31;40m%s\033[0m"%value)
 
def warning_log(value):
  if log_level > 1:
    print("\033[0;33;40m%s\033[0m"%value)
 
def debug_log(value):
  if log_level > 5:
    print("\033[0;34;40m%s\033[0m"%value)
 
def notify_log(value):
  if log_level > 2:
    print("\033[0;36;40m%s\033[0m"%value)
 
def user_log(value):
  if log_level > 4:
    print("\033[0;32;40m%s\033[0m"%value)
 
def ZLOG(log_type,value):
  switcher={
    'INFO':info_log,
    'ERROR':error_log,
    'WARNING':warning_log,
    'DEBUG':debug_log,
    'NOTIFY':notify_log,
    'USER':user_log
  }
  return switcher[log_type](value)
 
test="hello world"
ZLOG(LOG_INFO,"output info log %s"%test)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3实现Web网页图片下载
Jan 28 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
Python操作Excel插入删除行的方法
Dec 10 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
基于Python实现用户管理系统
Feb 26 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
解析python的局部变量和全局变量
Aug 15 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
了解一下python内建模块collections
Sep 07 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 #Python
Python实现直方图均衡基本原理解析
Aug 08 #Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 #Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 #Python
python判断自身是否正在运行的方法
Aug 08 #Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 #Python
python各类经纬度转换的实例代码
Aug 08 #Python
You might like
PHP4.04简明安装
2006/10/09 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
深入理解Python中变量赋值的问题
2017/01/12 Python
flask中的wtforms使用方法
2018/07/21 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python实现ip代理池功能示例
2019/07/05 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python创建学生管理系统
2019/11/22 Python
火车来了教学反思
2014/02/11 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
商场营业员岗位职责
2015/04/14 职场文书
公证书
2019/04/17 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
在Docker容器中部署SQL Server
2022/04/11 Servers
openstack云计算keystone组件工作介绍
2022/04/20 Servers