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冒泡排序算法的实现代码
Nov 21 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
python实现微信自动回复机器人功能
Jul 11 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python @classmethod 的使用场合详解
Aug 23 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
Python离线安装各种库及pip的方法
Nov 28 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
文件上传程序的全部源码
2006/10/09 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
修改发贴的编辑功能
2007/03/07 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python跳出循环语句continue与break的区别
2014/08/25 Python
python运行其他程序的实现方法
2017/07/14 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
python3对接mysql数据库实例详解
2019/04/30 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
市场部专员岗位职责
2013/11/30 职场文书
学校消防安全制度
2014/01/30 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
看上去很美观后感
2015/06/10 职场文书
小学生运动会广播
2015/08/19 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL