实现的效果:每一行都是一种颜色。如:
机制:核心还是类似于print()函数自定义内容颜色,就是开头加一些显示控制符,如:
logging.info("\033[显示方式;字体颜色;背景颜色m"+ "日志内容" +"\033[0m")
显示方式可以选择的,如下表:
显示方式 | 效果 |
---|---|
0 | 终端默认设置 |
1 | 高亮显示 |
4 | 使用下划线 |
5 | 闪烁 |
7 | 反白显示 |
8 | 不可见 |
字体颜色、背景颜色如下表:
字体色 | 背景色 | 颜色描述 |
---|---|---|
30 | 40 | 黑色 |
31 | 41 | 红色 |
32 | 42 | 绿色 |
33 | 43 | 黃色 |
34 | 44 | 蓝色 |
35 | 45 | 紫红色 |
36 | 46 | 青蓝色 |
37 | 47 | 白色 |
但是记这些数字还是比较有难度的,所幸,python有个colorama
库可以快速实现,于是基于该库,创建了一个coloredFormatter
新类,只要给handle的formatter制定为新建的类,其余的使用方法与原生的logging
模块无异。
下面是完整的代码,直接复制到脚本里就能使用:
import logging
import colorama
import time
from colorama import Fore, Style
# 初始化 Colorama 库
colorama.init()
# 自定义 Formatter 类
# 自定义 Formatter 类
class ColoredFormatter(logging.Formatter):
# 设置不同级别日志对应的颜色
COLOR_MAP = {
logging.DEBUG: Style.DIM + Fore.WHITE,
logging.INFO: Fore.GREEN,
logging.WARNING: Fore.YELLOW,
logging.ERROR: Fore.RED,
logging.CRITICAL: Style.BRIGHT + Fore.RED,
}
converter = time.localtime
def __init__(self, fmt=None, datefmt=None, style='%', validate=True):
super().__init__(fmt,datefmt,style,validate)
def format(self, record):
# 获取日志对应的颜色
log_color = ColoredFormatter.COLOR_MAP.get(record.levelno)
super().format(record)
msg = super().format(record)
return log_color+msg
log_format=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
color_log=ColoredFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 给logger新建另一个的处理程序,这个handler是循环日志文件,最大是5M,有5个文件,满了就覆写了
console_handler = logging.StreamHandler()
console_handler.setFormatter(color_log)
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)
if __name__ == '__main__':
logger.warning("haha")
logger.error("error")
logger.info("info")
logger.debug("info")