Python 解决日志 logging 中文乱码的问题

本文最后更新于:2022年7月4日 上午

Python - 使用logging模块管理日志文件 一文中介绍过python 日志模块 logging 的基础用法,该方法产生的logger会对中文乱码,本文记录解决方案。

问题原因

  • 中文乱码是因为日志写入数据的编码不支持中文
  • 需要将编码方案改为 utf-8
  • logging.basicConfig 在python 3.9 之前不支持 encoding 配置,而默认的 encodingNone
  • 导致使用 logging.basicConfig创建的logger 写入中文乱码

解决方案

  • 使用 logging.getLogger() 获取日志对象
  • 使用 FileHandler 函数确定编码方式,生成 handler
  • 将该 handler 加入到日志对象的 Handler 当中
1
2
3
4
5
6
7
8
9
10
11
# create logger obj
logger = logging.getLogger()

# set log level
logger.setLevel(level)

# file handler
handler = logging.FileHandler(log_file_path, mode=open_type, encoding='utf-8')
handler.setFormatter(logging.Formatter("%(asctime)s-%(name)s-%(levelname)s: %(message)s"))

logger.addHandler(handler)

封装方案

  • 这里我把相关内容封装到我的代码库中,可以使用如下命令安装:
1
pip install mtutils
  • 使用日志会方便得多
1
2
3
4
5
from mtutils import log_init

logger=log_init('test.log') # 默认级别为 INFO
logger('log info') # 默认级别为 INFO
logger('log info', level=50)
  • 输出日志
1
2
2022-01-05 14:45:35,804-root-INFO: log info
2022-01-05 14:45:35,805-root-CRITICAL: log info

参考资料


Python 解决日志 logging 中文乱码的问题
https://www.zywvvd.com/notes/coding/python/python-logger-utf8/python-logger-utf8/
作者
Yiwei Zhang
发布于
2022年1月5日
许可协议