上面我们说的是将日志打印到控制台中,但是我们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:
ANSI色彩编码只有在支持其的终端才能渲染为颜色,一旦写入文件就会失去这些编码信息。所以使用coloredlogs时,日志文件内实际保存的是未着色的原始文本。
如果想要文件中也保存颜色信息,可以考虑使用支持ANSI色彩的文件格式,比如HTML。然后通过logging模块支持的HTML Formatter输出彩色日志到HTML文件中,不过这种情况下就失去了纯文本文件的可阅读性。
综上,coloredlogs只是在终端美化日志展示效果,文件输出不保存颜色是正常情况。如果必须存储颜色,可以输出为HTML等格式,但复杂度会增加。
全部0条评论
快来发表一下你的评论吧 !