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

通过APScheduler执行Robot Framework任务时log.html无日志生成

解决APScheduler执行Robot Framework任务时日志不完整的问题

问题现象

直接运行Robot Framework任务时,log.html日志完整;但通过APScheduler后台定时执行同一任务时,log.html仅显示第一步日志,后续日志缺失。

核心原因

  1. Robot Framework的日志系统在多线程环境下存在线程安全问题,后台线程执行时日志缓冲区未及时刷新或写入被中断
  2. 多次定时任务复用同一输出目录/文件,导致日志文件被覆盖或写入冲突
  3. 后台线程环境下,Robot Framework默认日志级别可能未正确加载,导致DEBUG、TRACE级别的日志未被记录

解决方法

1. 为每次任务创建独立输出目录

避免多任务间的文件冲突,为每次执行生成带时间戳的独立目录:

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
import robot
from datetime import datetime, timedelta
import os

def run_robot_task(robot_file_path):
    # 生成带时间戳的独立输出目录
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    report_dir = f"./robot_reports/{timestamp}"
    os.makedirs(report_dir, exist_ok=True)
    
    # 显式设置日志级别,确保所有级别日志被捕获
    robot.run(
        robot_file_path,
        outputdir=report_dir,
        loglevel="TRACE"  # 覆盖默认级别,确保DEBUG、TRACE日志被记录
    )

scheduler = BackgroundScheduler()
job_trigger = IntervalTrigger(seconds=60)
robot_file_path = "./3.robot"

scheduler.add_job(
    run_robot_task, 
    job_trigger, 
    args=[robot_file_path], 
    id="robot_task",
    name="Execute Robot Framework Task", 
    next_run_time=datetime.now() + timedelta(seconds=5)
)

scheduler.start()

try:
    while True:
        pass
except (KeyboardInterrupt, SystemExit):
    scheduler.shutdown()

2. 使用APScheduler进程池执行任务

由于Robot Framework的robot.run并非线程安全,改用进程池调度可避免多线程冲突:

# 创建调度器时指定进程池执行器
scheduler = BackgroundScheduler(executors={
    'default': {'type': 'processpool', 'max_workers': 1}
})

3. 调整Robot Framework全局日志配置

在Robot测试文件中显式设置全局日志级别,确保后台执行时生效:

*** Settings ***
Library    Collections
Library    SeleniumLibrary
Library    DateTime
Library    OperatingSystem
Library    BuiltIn
Log Level    TRACE  # 全局设置日志级别

验证方法

执行定时任务后,查看每个时间戳目录下的log.html,确认所有日志步骤都已正常记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:07:35