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 相关文章推荐
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
对python tkinter窗口弹出置顶的方法详解
Jun 14 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
基于Python快速处理PDF表格数据
Jun 03 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Django显示可视化图表的实践
May 10 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
单位速度在实战中的运用
2020/03/04 星际争霸
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
PHP文件操作实例总结
2016/09/27 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
jQuery随机切换图片的小例子
2013/04/18 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
js仿360开机效果
2019/12/26 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
Python的动态重新封装的教程
2015/04/11 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
详解python中的装饰器
2018/07/10 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
酷瑞网络科技面试题
2012/03/30 面试题
如何利用cmp命令比较文件
2016/04/11 面试题
线程同步的方法
2016/11/23 面试题
求职简历自荐信范文
2013/10/21 职场文书
会议邀请函范文
2014/01/09 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android