在PyCharm中控制台输出日志分层级分颜色显示的方法

1、把下面代码复制到一个.py文件中

#!/usr/bin/env python
# encoding: utf-8
import logging

# now we patch Python code to add color support to logging.StreamHandler
def add_coloring_to_emit_windows(fn):
  # add methods we need to the class
  def _out_handle(self):
    import ctypes
    return ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)

  out_handle = property(_out_handle)

  def _set_color(self, code):
    import ctypes
    # Constants from the Windows API
    self.STD_OUTPUT_HANDLE = -11
    hdl = ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)
    ctypes.windll.kernel32.SetConsoleTextAttribute(hdl, code)

  setattr(logging.StreamHandler, '_set_color', _set_color)

  def new(*args):
    FOREGROUND_BLUE = 0x0001 # text color contains blue.
    FOREGROUND_GREEN = 0x0002 # text color contains green.
    FOREGROUND_RED = 0x0004 # text color contains red.
    FOREGROUND_INTENSITY = 0x0008 # text color is intensified.
    FOREGROUND_WHITE = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
    # winbase.h
    STD_INPUT_HANDLE = -10
    STD_OUTPUT_HANDLE = -11
    STD_ERROR_HANDLE = -12

    # wincon.h
    FOREGROUND_BLACK = 0x0000
    FOREGROUND_BLUE = 0x0001
    FOREGROUND_GREEN = 0x0002
    FOREGROUND_CYAN = 0x0003
    FOREGROUND_RED = 0x0004
    FOREGROUND_MAGENTA = 0x0005
    FOREGROUND_YELLOW = 0x0006
    FOREGROUND_GREY = 0x0007
    FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.

    BACKGROUND_BLACK = 0x0000
    BACKGROUND_BLUE = 0x0010
    BACKGROUND_GREEN = 0x0020
    BACKGROUND_CYAN = 0x0030
    BACKGROUND_RED = 0x0040
    BACKGROUND_MAGENTA = 0x0050
    BACKGROUND_YELLOW = 0x0060
    BACKGROUND_GREY = 0x0070
    BACKGROUND_INTENSITY = 0x0080 # background color is intensified.

    levelno = args[1].levelno
    if (levelno >= 50):
      color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY
    elif (levelno >= 40):
      color = FOREGROUND_RED | FOREGROUND_INTENSITY
    elif (levelno >= 30):
      color = FOREGROUND_YELLOW | FOREGROUND_INTENSITY
    elif (levelno >= 20):
      color = FOREGROUND_GREEN
    elif (levelno >= 10):
      color = FOREGROUND_MAGENTA
    else:
      color = FOREGROUND_WHITE
    args[0]._set_color(color)

    ret = fn(*args)
    args[0]._set_color(FOREGROUND_WHITE)
    # print "after"
    return ret

  return new

def add_coloring_to_emit_ansi(fn):
  # add methods we need to the class
  def new(*args):
    levelno = args[1].levelno
    if (levelno >= 50):
      color = '\x1b[31m' # red
    elif (levelno >= 40):
      color = '\x1b[31m' # red
    elif (levelno >= 30):
      color = '\x1b[33m' # yellow
    elif (levelno >= 20):
      color = '\x1b[32m' # green
    elif (levelno >= 10):
      color = '\x1b[35m' # pink
    else:
      color = '\x1b[0m' # normal
    try:
      args[1].msg = color + args[1].msg + '\x1b[0m' # normal
    except Exception as e:
      pass
    # print "after"
    return fn(*args)

  return new

import platform

if platform.system() == 'Windows':
  # Windows does not support ANSI escapes and we are using API calls to set the console color
  logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit)
else:
  # all non-Windows platforms are supporting ANSI escapes so we use them
  logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit)
  # log = logging.getLogger()
  # log.addFilter(log_filter())
  # //hdlr = logging.StreamHandler()
  # //hdlr.setFormatter(formatter())

2、将文件放到项目的utils包中(或者项目其他路径)

3、在配置文件中导入这个py文件

比如在Django的setting.py文件中配置日志信息时,可以先导入这个文件

之后运行代码,控制台会根据日志等级显示不同的颜色

4、pycharm版本最好是17版本以上的

以上这篇在PyCharm中控制台输出日志分层级分颜色显示的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决PyCharm控制台输出乱码的问题

    最近公司新换了台电脑,各种开发环境要重新配置,想想Paas确实还是有市场的,如果有了,这种情况可以省下不少气力.吐槽一下,言归正传 装完python后,继续装好PyCharm.把之前的程序导进来试运行下安装是否成功,发现控制台里的显示结果有乱码.乱码部分是一个目录的输出,这个目录里含有中文路径 网上搜了下,有人说把下面图中的两个Encoding设置为UTF-8会解决这个问题.这么配置了下,发现不起作用,即使我代码里本身已经用了UTF-8编码了. 又过了两天,期间有时间就换着关键词百度,终于发现了

  • 使用pycharm设置控制台不换行的操作方法

    pandas进行打印,控制台的显示默认是换行的在pycharm中的控制台也没有办法设置 可加入如下代码打印,结果不换行,看着数据更加直观 import pandas as pd import numpy as np # pd.set_option('display.height', 1000) # pd.set_option('display.max_rows', 500) # pd.set_option('display.max_columns', 500) pd.set_option('di

  • 解决使用PyCharm时无法启动控制台的问题

    问题: 使用PyCharm时无法启动控制台? 今天打开PyCharm时突然无法启动控制台,IPython和Python本身都无法使用 解决: 很有可能你安装了较高版本的ipython.比如ipython5.0.0 请尝试: pip uninstall ipython pip install ipython==4.2.0 ipython版本过高 pycharm>2016版本,两者冲突 以上这篇解决使用PyCharm时无法启动控制台的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大

  • 在PyCharm中控制台输出日志分层级分颜色显示的方法

    1.把下面代码复制到一个.py文件中 #!/usr/bin/env python # encoding: utf-8 import logging # now we patch Python code to add color support to logging.StreamHandler def add_coloring_to_emit_windows(fn): # add methods we need to the class def _out_handle(self): import

  • Pycharm中import torch报错的快速解决方法

    Pycharm中import torch报错 问题描述: 今天在跑GitHub上一个深度学习的模型,需要引入一个torch包,在pycharm中用pip命令安装时报错: 于是我上网寻求解决方案,试了很多都失败了,最后在:Anne琪琪的博客中找到了答案,下面记录一下解决问题的步骤: 1.打开Anaconda prompt执行下面命令: conda install pytorch-cpu torchvision-cpu -c pytorch 等待运行结束. 2. 测试torch是否安装成功 impo

  • 在Pycharm中项目解释器与环境变量的设置方法

    1.官网下载Pycharm community版如pycharm-community-2017.3.1.tar.gz. 2. #解压tar.gz tar xfz pycharm-*.tar.gz cd bin ./Pycharm.sh 然后,一路next安装. 3.出现Pycharm图像界面时,表明安装成功. 4.新建项目 1)File->New project-> 设置项目所在路径: 设置解释器:ubuntu16.04默认安装python2.python3.python2.7.python3

  • 在Pycharm中对代码进行注释和缩进的方法详解

    一.注释 1. #单行注释 2. """ 多行注释 """ 3. pycharm多行注释快捷键:Ctrl+/ 二.缩进 缩进:Tab 反向缩进:Shift+Tab 以上这篇在Pycharm中对代码进行注释和缩进的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 在pycharm中使用git版本管理以及同步github的方法

    注意:首先你电脑必须安装git版本控制器(软件),在官网下载即可. pycharm中使用git以及github很简单,首先在设置中搜索github: 点击右边的Create API Token,系统会要求输入你的github账号和密码,当你输入正确点击确认后会进行身份认证,认证成功后会创建一段TOKEN.这时你的github库与pycharm就联系起来了. 之后,你可以将你新建的工程上传到你的github库,点击VCS,点击"import into Version Control"中的

  • pycharm中使用request和Pytest进行接口测试的方法

    安装request库 以火车的站站查询为例的post和get方法的接口测试 使用pytest测试接口 1.requests的请求机制 1.安装request库 2.以火车的站站查询为例的post和get请求方法 2.1get请求: 两种传参方式 1._url = "网址+参数" = "网址?key1=value1&key2=value2" response1 = request.get(url = _url) 2.字典拼接 _params = { "

  • PowerShell中直接输出转义字符或变量名称的方法

    本文介绍在PowerShell的字符串中,如何禁止字符串中某分字符被转义或部分字符被当作变量,即让字符串中所有的字符都原样输出. 在PowerShell中,转义字符是以字符(·)开头的一部分特殊字符,可以用于实现换行.TAB等功能.而变量则是以符号($)开头,代表一个值.之前的文章中我们介绍过转义字符,也介绍过在字符串中包含变量.有兴趣的朋友可以去了解一下. 在PowerShell中可以用一对双引号引起一个字符串,也可以使用一对单引号引起一个字符串.而用单引号与双引号最大的一个区别是,双引号引起

  • Java中byte输出write到文件的实现方法讲解

    简述: 观察Byte值转为字符写入文件 如果在java里用byte打印出来 只有33 到 126的输出字符比较正常 此外发现Byte值为13是空格,10是换行符 知识点: 1. String 转为Byte输出("UTF-8"格式) 2. FileOutputStream 使用输出文件流 代码: package testChar; import java.io.File; import java.io.FileNotFoundException; import java.io.FileO

  • Python 如何限制输出日志的大小

    限制输出日志的大小有多种方法,最优雅的莫过于直接使用rotate机制,这种机制广泛存在于各种编程语言,Python也不例外.其次,还可以使用mount挂载一个文件,作为日志存储的位置,因为文件大小是有限的,所以日志的大小也被限制.还有可以用ulimit. RotatingFileHandler RotatingFileHandler是logging.handler的一种,在python docs中,这个类的构造函数示例用法如下 class logging.handlers.RotatingFil

  • python 实现logging动态变更输出日志文件名

    python作为一门非常容易上手的脚本语言,日志输出更是简单,logging模块,简单的设置配置和属性,就能实现到控制台输出日志,在basicConfig()设置文件名,就能够将日志信息写入文件,简直是简单到不能再简单. 最近在项目中就遇到一个日志问题,使用python编写的服务程序一直运行,连续处理一些任务,每个任务的关键信息都需要输出到文件中,便于维护人员查看,可是对于简单实用logging来说,日志写入文件非常简单,由于服务程序连续运行,一直向一个文件记录日志信息有些不妥,有常识的开发人员

随机推荐