返回

彩色打印log的妙招

前端

前言

在工作中我们经常会打印log去查看数据与关键逻辑。但这些log在项目log过多时寻找起来就会变得异常麻烦并且不规范的log打印让代码看起来不是那么的整洁与优雅,所以我想分享一个关于彩色打印log的方案。

解决方案

为了能够在项目中对不同的log进行着色显示,我们需要用到Python的logging包,这个包是Python标准库的一部分,所以我们可以直接导入使用。

首先,我们需要在项目中创建一个logging的配置文件,通常情况下我们会将其命名为logging.conf,并将它放在项目的根目录下。在配置文件中,我们可以配置log的格式、级别、输出位置等信息。

[loggers]
keys=root,my_logger

[handlers]
keys=consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_my_logger]
level=INFO
handlers=consoleHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

在配置文件中,我们定义了两个logger,分别是rootmy_logger,并分别设置了它们的级别和输出位置。consoleHandler是一个流处理器,它将log输出到控制台。simpleFormatter是一个格式器,它指定了log的格式。

接下来,我们需要在代码中导入logging包,并使用logging.basicConfig()函数来加载配置文件。

import logging

# 加载配置文件
logging.basicConfig(filename='logging.conf', level=logging.DEBUG)

# 获取一个logger实例
logger = logging.getLogger('my_logger')

# 使用logger实例输出log
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')

这样,我们就可以在代码中使用不同的log级别来输出log,并且这些log会按照配置文件中的格式输出到控制台。

彩色显示

为了让log的输出更加美观,我们可以使用logging.addFilter()函数来添加一个过滤器,这个过滤器可以根据log的级别来对log的文本颜色进行着色。

import logging

# 创建一个过滤器
filter = logging.Filter(name='my_filter')

# 设置过滤器
filter.filter = lambda record: record.levelno == logging.INFO

# 添加过滤器
logging.getLogger('my_logger').addFilter(filter)

# 使用logger实例输出log
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')

这样,只有INFO级别的log才会被着色显示。我们可以根据需要添加不同的过滤器来对不同级别的log进行着色。

总结

通过使用Python的logging包,我们可以很容易地在项目中实现彩色打印log,这使得log的输出更加美观,也更易于调试。