You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将控制台输出及错误信息重定向到日志文件

Python控制台输出+异常信息统一写入日志解决方案

Python的控制台输出分为两个独立流:sys.stdout 负责普通输出(如print语句内容),sys.stderr 负责异常栈、报错信息输出。你已经完成了stdout的重定向,只需同步将stderr指向同一个日志文件即可满足需求。

基础版实现(仅写入日志文件)

import sys
import os

# 提前创建日志目录,避免路径不存在报错
os.makedirs(r'mydir', exist_ok=True)
# 打开日志文件:w模式覆盖上次日志,a模式追加历史日志,buffering=1为行缓冲避免日志丢失
log_file = open(r'mydir\Log.txt', 'w', encoding='utf-8', buffering=1)
# 同时重定向普通输出和错误输出
sys.stdout = log_file
sys.stderr = log_file

# 下方写你的业务代码即可,所有print、报错都会写入日志

注意事项

  • 如需保留每次运行的历史日志,将打开模式从w改为a即可
  • buffering=1配置为行缓冲,每输出一行就同步写入磁盘,避免程序意外崩溃时内存中的日志未落盘
  • 指定encoding='utf-8'避免日志中出现中文乱码

进阶版实现(同时输出到控制台+日志文件)

如果调试阶段需要实时查看输出,同时保留日志文件,可以自定义双流类同时输出到两个终端:

import sys
import os

class DualOutput:
    def __init__(self, file, console):
        self.file = file
        self.console = console
    def write(self, content):
        self.file.write(content)
        self.console.write(content)
    def flush(self):
        self.file.flush()
        self.console.flush()

os.makedirs(r'mydir', exist_ok=True)
log_file = open(r'mydir\Log.txt', 'w', encoding='utf-8', buffering=1)
sys.stdout = DualOutput(log_file, sys.__stdout__)
sys.stderr = DualOutput(log_file, sys.__stderr__)

全局异常兜底补充

为了极端场景下也能完整捕获异常栈,可在业务代码外层加全局捕获逻辑:

if __name__ == "__main__":
    try:
        # 替换为你的业务入口函数
        your_main_function()
    except Exception as e:
        import traceback
        # 主动打印异常栈,确保完整报错信息写入日志
        traceback.print_exc()
        # 可选:保留原异常退出逻辑,不影响程序原有行为
        raise e

内容的提问来源于stack exchange,提问作者smitty_werben_jagerm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:09:03