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

如何在Python脚本中创建带时间前缀的日志文件并保存所有运行日志

实现带时间戳日志记录的修改方案

方案1:最小改动(保留原有print语句)

不需要修改现有代码里的print调用,只需要在代码开头加一段配置,就能把所有控制台输出(包括print内容、requests库的报错等)同时输出到控制台和按要求命名的日志文件中:

  1. 新增依赖导入
import sys
from datetime import datetime
  1. 新增双输出工具类,同时往控制台和文件写内容
class DualOutput:
    def __init__(self, filename):
        self.terminal = sys.stdout
        self.log = open(filename, "a", encoding="utf-8")
    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
    def flush(self):
        self.terminal.flush()
        self.log.flush()
  1. 代码开头初始化日志配置
# 生成符合要求的日志文件名 log_yyyy-MM-dd-hhmmss
log_filename = datetime.now().strftime("log_%Y-%m-%d-%H%M%S.txt")
# 重定向标准输出、错误输出
sys.stdout = DualOutput(log_filename)
sys.stderr = DualOutput(log_filename)

方案2:规范日志方案(推荐)

用Python标准库logging替换原有print,可自动给每条日志加上时间前缀,还能捕获requests依赖库的运行日志,更适合长期运维追踪:

第一步:添加日志配置(放在代码开头)

import logging
from datetime import datetime
import sys
# 生成日志文件名
log_filename = datetime.now().strftime("log_%Y-%m-%d-%H%M%S.log")
# 全局日志配置
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
    handlers=[
        logging.FileHandler(log_filename, encoding="utf-8"), # 输出到文件
        logging.StreamHandler(sys.stdout) # 同时输出到控制台
    ]
)
# 开启requests底层依赖的日志捕获
logging.getLogger("urllib3").setLevel(logging.INFO)

第二步:替换原有print语句

把原有所有print(xxx)替换为logging.info(xxx)即可,比如:

# 原代码
print('Extraction is not complete, we shall poll the location URL:')
# 替换后
logging.info('Extraction is not complete, we shall poll the location URL:')

修正后完整可运行参考代码(基于方案1)

import requests
import json
import shutil
import time
import gzip
import os
import sys
from datetime import datetime

# ========== 日志配置开始 ==========
class DualOutput:
    def __init__(self, filename):
        self.terminal = sys.stdout
        self.log = open(filename, "a", encoding="utf-8")
    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
    def flush(self):
        self.terminal.flush()
        self.log.flush()

log_filename = datetime.now().strftime("log_%Y-%m-%d-%H%M%S.txt")
sys.stdout = DualOutput(log_filename)
sys.stderr = DualOutput(log_filename)
# ========== 日志配置结束 ==========

# 请在此处补充你原有生成r2、token、初始status_code的逻辑
# 以下为你原有代码的语法修复版本
# extraction request:
if status_code == 202:
    requestUrl = r2.headers["location"]
    print('Extraction is not complete, we shall poll the location URL:')
    print(str(requestUrl))
    requestHeaders = {
        "Prefer": "respond-async",
        "Content-Type": "application/json",
        "Authorization": "token " + token
    }

while (status_code == 202):
    print('As we received a 202, we wait 30 seconds, then poll again (until we receive a 200)')
    time.sleep(30)
    r3 = requests.get(requestUrl, headers=requestHeaders)
    status_code = r3.status_code
    print('HTTP status of the response: ' + str(status_code))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:45:04