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学习笔记(二)基础语法
Jun 06 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
python中int与str互转方法
Jul 02 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
python 消费 kafka 数据教程
Dec 21 Python
Python验证码截取识别代码实例
May 16 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
用Python可视化新冠疫情数据
Jan 18 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+DBM的同学录程序(2)
2006/10/09 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
php绘制一条弧线的方法
2015/01/24 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Django发送html邮件的方法
2015/05/26 Python
python实现KNN分类算法
2019/10/16 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
副职竞争上岗演讲稿
2014/05/12 职场文书
视光学专业自荐信
2014/06/24 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
商场营业员岗位职责
2015/04/14 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
Nginx进程调度问题详解
2021/09/25 Servers