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使用Flask框架同时上传多个文件的方法
Mar 21 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
如何通过python画loss曲线的方法
Jun 26 Python
详解如何减少python内存的消耗
Aug 09 Python
django ajax发送post请求的两种方法
Jan 05 Python
Python如何在循环内使用list.remove()
Jun 01 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
python not运算符的实例用法
Jun 30 Python
基于Python实现nc批量转tif格式
Aug 14 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
Zend公司全球首推PHP认证
2006/10/09 PHP
提升PHP速度全攻略
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
javascript 打印页面代码
2009/03/24 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
浅谈react 同构之样式直出
2017/11/07 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
军校本科大学生自我评价
2014/01/14 职场文书
优秀党员获奖感言
2014/02/18 职场文书
班级寄语大全
2014/04/10 职场文书
房产转让协议书
2014/04/11 职场文书
测控技术自荐信
2014/06/05 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL