写入到日志文件
上面我们说的是将日志打印到控制台中,但是我们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等格式,但复杂度会增加。
-
文件
+关注
关注
1文章
587浏览量
25920 -
日志
+关注
关注
0文章
145浏览量
11028 -
python
+关注
关注
57文章
4858浏览量
89600
发布评论请先 登录
Termux中调试圣诞树Python代码
使用ulog 写入日志到文件系统,无法使用cat命令读取文件内容怎么解决?
使用littlefs存储ulog日志,然后读日志文件会出错,为什么?
文件系统的文件怎么循环覆盖的写入数据?
termux如何搭建python游戏
python app不能运行怎么解决?
跟老齐学Python:从入门到精通
基于RV1126开发板限制系统日志大小教程

Python写入到日志文件完整代码
评论