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数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
分析Python读取文件时的路径问题
Feb 11 Python
Python发送http请求解析返回json的实例
Mar 26 Python
python使用matplotlib绘制热图
Nov 07 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
python求平均数、方差、中位数的例子
Aug 22 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
python logging通过json文件配置的步骤
Apr 27 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
Sony CFR 320 修复改造
2020/03/14 无线电
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
python字符串对其居中显示的方法
2015/07/11 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python__name__原理及用法详解
2019/11/02 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
创立科技Java面试题
2015/11/29 面试题
学校七一活动方案
2014/01/19 职场文书
旷课检讨书大全
2014/01/21 职场文书
酒店总经理助理职责
2014/02/12 职场文书
科技活动总结范文
2015/05/11 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS
table不让td文字溢出操作方法
2022/12/24 HTML / CSS