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中的元祖(Tuple)和字典(Dict)
Apr 21 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
python查看矩阵的行列号以及维数方式
May 22 Python
学习python需要有编程基础吗
Jun 02 Python
Python下划线5种含义代码实例解析
Jul 10 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python比较两个图片相似度的方法
2015/03/13 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
wxPython实现整点报时
2019/11/18 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Python中内建模块collections如何使用
2020/05/27 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
Java如何读取CLOB字段
2013/10/10 面试题
文明餐桌活动方案
2014/02/11 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
一文搞懂MySQL索引页结构
2022/02/28 MySQL
分享7个 Python 实战项目练习
2022/03/03 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android