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中title()方法的使用简介
May 20 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
用python结合jieba和wordcloud实现词云效果
Sep 05 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
python 利用Pyinstaller打包Web项目
Oct 23 Python
Django数据统计功能count()的使用
Nov 30 Python
python实现经典排序算法的示例代码
Feb 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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
destoon复制新模块的方法
2014/06/21 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
php集成开发环境详解
2019/09/24 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
捕获关闭窗口的脚本
2009/01/10 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
在Python中使用第三方模块的教程
2015/04/27 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
python2 与python3的print区别小结
2018/01/16 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
Python魔术方法专题
2020/06/19 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
Overload和Override的区别
2012/09/02 面试题
大学毕业登记表自我鉴定
2013/10/09 职场文书
高中生学习的自我评价
2013/12/14 职场文书
无故旷工检讨书
2014/01/26 职场文书
护士自我评价
2014/02/01 职场文书
铁路安全反思材料
2014/12/24 职场文书
七一表彰大会简报
2015/07/20 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python
优化Mysql查询的示例
2022/04/26 MySQL