Python logging模块如何设置日志文件换行符以实现跨平台统一?
统一logging模块跨平台换行符的实现方案
方案1:Python 3.9及以上版本直接使用原生参数
Python 3.9开始logging.FileHandler已经原生支持newline参数,用法和io.open完全一致:
import logging handler = logging.FileHandler( filename="test.log", mode="a", encoding="utf-8", newline="\n" # 强制统一用LF换行,不受操作系统影响 ) # 后续正常添加Formatter、绑定Logger即可
方案2:Python 3.7/3.8版本自定义Handler实现
如果使用的是3.7、3.8版本,只需要继承FileHandler重写_open方法,手动指定换行符:
import logging import io class FixedNewlineFileHandler(logging.FileHandler): def _open(self): # 所有打开文件的参数都继承原有配置,仅新增newline参数 return io.open( self.baseFilename, self.mode, encoding=self.encoding, errors=self.errors, newline="\n" # 这里固定为你需要的换行符,比如\n就是统一LF ) # 使用时直接替换原生FileHandler即可 handler = FixedNewlineFileHandler(filename="test.log", encoding="utf-8")
方案3:通过StreamHandler手动绑定文件流
也可以自己先打开指定换行符的文件流,再绑定到StreamHandler上使用:
import logging # 先打开文件并指定换行符 log_file = open("test.log", "a", encoding="utf-8", newline="\n") handler = logging.StreamHandler(log_file)
注意:该方案需要在程序退出前手动关闭
log_file文件对象,避免日志丢失。
内容的提问来源于stack exchange,提问作者Kochise
相关产品推荐
相关产品推荐

