Python系列:彩色日志

本文介绍了如何在Python中使用coloredlogs库实现彩色控制台输出和日志管理,包括安装、设置日志级别、自定义输出样式,以及处理文件输出和颜色丢失的问题。
摘要由CSDN通过智能技术生成

哈喽大家好,今天来给大家介绍如何使用Python在控制台输出彩色数据以及生成彩色日志

前言

在使用Python进行编程时,我相信很多小伙伴都有一个共通的习惯,就是不管在什么场景下,都会先使用print()将我们获取到的数据打印出来以此来确保自己的代码没有问题。虽说在pycharm中提供了DEBUG功能,但是还是有很多小伙伴用不来这个或者是不喜欢用,自身还是比较喜欢使用print()来进行打桩验证。

但是如果我们的Python代码中有很多需要打印出来的数据时,使用print答应出来的数据就会很多,看起来就比较麻烦,那么有什么方法来解决这个问题呢?

别着急,接着往下看。Python中提供了很多丰富多彩的标准库和支持大量的第三方库,在本篇文章中,我们就会使用到coloredlogs

coloredlogs介绍

coloredlogs是一个Python库,它允许开发人员在控制台打印彩色日志。这个库的主要优点是它可以很容易地改变日志消息的颜色,从而使日志更易于阅读和理解。这对于长时间运行的应用程序或者需要详细查看日志信息的情况非常有用。

coloredlogs库的使用

1.安装coloredlogs

在使用前我们需要在Python中下载它

pip install coloredlogs
2.设置logger日志级别

首先,在我们记录日志时,需要先设置日志级别和格式

coloredlogs.install(level='DEBUG', fmt='%(asctime)s %(levelname)s %(message)s')
3.自定义输出样式

如果我们不结合coloredlogs直接将我们的日志打印到控制台

logging.debug('debug message')
logging.info('info message')
logging.error('error message')
logging.warning('warning message')

输出到控制的话就只会将error和warning两个级别的日志在控制打印出来,debug和info级别的日志就无法在控制台打印出来,而且显示的两种日志都是一样的颜色并且格式也不好看

图片

下面是在我们结合使用coloredlogs后在控制台的输出效果

import coloredlogs
import logging

coloredlogs.install(level='DEBUG', fmt='%(asctime)s %(levelname)s %(message)s')

logging.debug('debug message')
logging.info('info message')
logging.error('error message')
logging.warning('warning message')

输出效果如下

图片

可以很明显的看出,它自动帮我们加上了日志的输出时间和根据不同日志级别显示不一样的颜色来区分,这比我们直接用logging输出要好得多

4.自定义输出格式

我们可以在之前添加的输出格式中添加其他的格式内容

import coloredlogs
import logging

def func_name():
    # 增加了modules、funcName两个变量,分辨标识我们日志所在文件以及在哪一个函数中输入的日志
    coloredlogs.install(level='DEBUG', fmt='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')

    logging.debug('debug message')
    logging.info('info message')
    logging.error('error message')
    logging.warning('warning message')


func_name()

输出结果如下

图片我们增加了两个变量后,可以方便我们后续寻找问题时就直接定位到了那个文件中的哪个函数出了问题,这是不是就方便我们后面解决问题的效率。

5.自定义日志级别输出样式

再上面我们是直接使用了coloredlogs中的默认日志级别颜色样式,同样的我们也可以自定义设置不同日志的显示的样色样式

import coloredlogs
import logging


def fun_name():
    level_styles = coloredlogs.DEFAULT_LEVEL_STYLES.copy()
    level_styles['debug'] = {'color': 'magenta'}
    level_styles['info'] = {'color': 'yellow'}
    level_styles['error'] = {'color': 'red'}
    level_styles['warning'] = {'color': 'blue'}
    coloredlogs.install(level="DEBUG", level_styles=level_styles,
                        fmt='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')

    logging.debug('debug message')
    logging.info('info message')
    logging.error('error message')
    logging.warning('warning message')


fun_name()

输入样式如下

在这里插入图片描述

6.写入到日志文件

上面我们说的是将日志打印到控制台中,但是我们Python代码写完并且在运行当中后,我们就不可能这样玩了,所以我们需要将日志保存到一个日志文件中

完整代码如下:

import coloredlogs
import logging


def func_name():
    # 创建文件handler
    file_handler = logging.FileHandler('log_file.log')

    # 设置日志格式
    formatter = logging.Formatter('%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)

    # 安装coloredlogs并设置级别
    level_styles = coloredlogs.DEFAULT_LEVEL_STYLES.copy()
    coloredlogs.install(level="DEBUG", level_styles=level_styles,
                        fmt='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')

    # 获取logger 并添加文件handler
    logger = logging.getLogger()
    logger.addHandler(file_handler)

    # 移除默认StreamHandler
    logger.removeHandler(logging.StreamHandler())

    # 测试输出日志
    logger.debug('debug message')
    logger.info('info message')
    logger.error('error message')
    logger.warning('warning message')


func_name()

打开我们log_file.log文件后,就可以看到我们生成的日志信息

图片

可以看到我们生成的日志文件中不同级别的日志还是使用的是一样的颜色。那这是为什么呢?

其实coloredlogs 库只是在终端输出时给日志添加了颜色,但写入文件时colors并不能保留。

这是因为终端输出和文件输出使用的是不同的handler:

  • 终端输出使用的是StreamHandler,可以 interpreter 处理ANSI色彩编码显示颜色。
  • 文件输出使用的是FileHandler,写入的仅是纯文本,无法保存ANSI编码的颜色信息。

ANSI色彩编码只有在支持其的终端才能渲染为颜色,一旦写入文件就会失去这些编码信息。所以使用coloredlogs时,日志文件内实际保存的是未着色的原始文本。

如果想要文件中也保存颜色信息,可以考虑使用支持ANSI色彩的文件格式,比如HTML。然后通过logging模块支持的HTML Formatter输出彩色日志到HTML文件中,不过这种情况下就失去了纯文本文件的可阅读性。
综上,coloredlogs只是在终端美化日志展示效果,文件输出不保存颜色是正常情况。如果必须存储颜色,可以输出为HTML等格式,但复杂度会增加。

如果有小伙伴对写入到html文件感兴趣的,这里我提供我写的一份代码,你们可以拿去自行研究哈~~

import coloredlogs
import logging
from logutils.colorize import ColorizingStreamHandler
import sys

def func_name():
    # 创建一个ColorizingStreamHandler
    color_handler = ColorizingStreamHandler(sys.stdout)
    color_handler.setLevel(logging.DEBUG)

    # 设置格式器
    html_formatter = logging.Formatter('<p>%(asctime)s - %(name)s - %(levelname)s - %(message)s</p>')
    color_handler.setFormatter(html_formatter)

    # 安装coloredlogs
    coloredlogs.install(level='DEBUG',fmt='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')

    # 获取logger并添加handler
    logger = logging.getLogger()
    logger.addHandler(color_handler)

    # 日志输出
    logger.debug('debug message')
    logger.info('info message')
    logger.error('error message')
    logger.warning('warning message')

    # 重定向输出到文件
    with open('log_file.log.html', 'w') as f:
        old_stdout = sys.stdout
        sys.stdout = f
        logger.debug('debug message')
        logger.info('info message')
        logger.error('error message')
        logger.warning('warning message')
        sys.stdout = old_stdout

    # 关闭默认StreamHandler
    logger.removeHandler(logging.StreamHandler())

func_name()

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值