Python logging如何实现每次写入日志文件时自动flush刷新?
解决方案
方案1:手动显式刷新日志
每次写完日志后主动调用所有日志处理器的flush方法,把缓冲内容强制写入磁盘。该方案改造成本最低,不需要修改原有日志初始化配置。
你只需要在logging.info()代码行后新增以下内容即可:
for handler in logging.root.handlers: handler.flush()
方案2:初始化日志时配置行缓冲模式
出现该缓冲现象的原因是系统文件层的缓冲导致的:默认用filename参数初始化日志时,Python调用系统默认参数打开日志文件,Windows系统默认的文件缓冲阈值较大,低频写入场景下就会出现延迟写入的情况。
你可以自行打开日志文件时指定缓冲规则,再传给日志模块使用,一次配置即可实现自动刷新,无需额外调用flush方法,适合长期运行的服务使用。示例代码如下:
import logging # 打开日志文件时指定行缓冲模式:buffering=1代表每写入一行就自动刷新到磁盘 log_file = open('MyLog.txt', 'a', buffering=1, encoding='utf-8') # 用stream参数传入自己打开的文件对象,替代原有filename参数 logging.basicConfig(stream=log_file, level=logging.DEBUG) while True: <snip - get the data> if newdata == 1 : print ("> ",DataString,sep='') logging.info(datettime_string+' '+DataString)
如果需要完全无缓冲模式,可以将buffering参数设为0,注意该配置仅支持二进制模式打开文件,文本格式日志使用行缓冲即可满足实时写入需求。
内容的提问来源于stack exchange,提问作者tim11g
相关产品推荐
相关产品推荐

