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 strip lstrip rstrip使用方法
Sep 06 Python
下载给定网页上图片的方法
Feb 18 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 Python
Python3的进程和线程你了解吗
Mar 16 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
php获取某个目录大小的代码
2008/09/10 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
js编写简单的计时器功能
2017/07/15 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
进一步理解Python中的函数编程
2015/04/13 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
PyTorch中的C++扩展实现
2020/04/02 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
区域销售经理岗位职责
2013/12/10 职场文书
大学生演讲稿范文
2014/01/11 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
医学生自荐信范文
2015/03/05 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle