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

描述

写入到日志文件

上面我们说的是将日志打印到控制台中,但是我们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文件后,就可以看到我们生成的日志信息

python

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

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

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

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

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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分