影刀RPA完全指南:日志系统三层架构与运行报告生成

做自动化时间久了就会明白一个道理:流程写得好不如日志写得好。 流程出了错,日志清晰的话5分钟就能定位问题;日志稀烂的话,可能要花半天从头查起。

影刀的日志系统其实很强,但大部分人只用到了“输出日志”这一个功能。今天把日志系统的三层架构拆开讲——执行日志、运行报告、错误截图,外加一个自动生成日报的方案。

picture.image


先说日志的三个层级

picture.image

层级内容用途保留时间
L1-执行日志每条指令的执行记录、变量值实时排查、定位错误7-30天
L2-运行报告流程摘要(开始/结束/耗时/状态/数据量)每日复盘、效果统计长期保存

picture.image | L3-错误截图 | 出错时自动截屏 | 可视化排查、证据留存 | 30-90天 |

三个层级互相补充。排查问题时:先看运行报告确认哪个流程出问题了,再看执行日志定位具体哪一行,最后看错误截图确认当时页面是什么状态。


picture.image

L1-执行日志:每条指令的“行车记录仪”

影刀RPA实操路径: 指令面板搜索“输出日志”,拖入画布。这是最基础的日志指令。

picture.image 三种日志级别(在输出日志指令的详情面板里选择):

级别颜色使用场景
信息蓝色正常流程节点:开始、完成、数据量统计

picture.image | 警告 | 黄色 | 可恢复的异常:重试成功、元素未找到但跳过 | | 错误 | 红色 | 不可恢复的异常:登录失败、数据写入失败 |

日志规范模板:

picture.image

# ===== 每个子流程的标准日志结构 =====
# 1. 进入子流程
输出日志("【进入】子流程名称 | 参数:参数名=参数值")


![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/6cf12cda89ec4de9a2fe1c34f892d0ef~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783194797&x-signature=k8k6Y39gi2jfEgKuoJUnjxyZqC4%3D)
# 2. 关键节点
输出日志("【进度】已处理 " + 当前数 + "/" + 总数)

# 3. 数据变更
输出日志("【数据】采集到 " + 新数据量 + " 条,累计 " + 累计量 + " 条")

# 4. 异常
输出日志("【异常】错误描述 | 当前URL:" + 当前页面URL)

# 5. 退出子流程
输出日志("【退出】子流程名称 | 耗时:" + 耗时 + "秒 | 状态:成功/失败")

一个完整的子流程日志示例:

# ========================================
# 子流程:Fetch_ProductList
# ========================================

输出日志("【进入】Fetch_ProductList | 关键词=手机 | 最大页数=5")

Try:
    输出日志("【进度】开始搜索关键词:手机")
    搜索关键词("手机")
    等待元素加载("//div[@class='product-list']", 超时时间=10秒)
    
    
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/b532a09854ed4f24a2448cd793db20d4~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783194797&x-signature=hw9J%2B43SeZVsGhmqQzkt0gVn1LE%3D)
    获取相似元素列表("//div[@class='product-item']", 存入列表=items)
    商品数量 = 获取列表长度(items)
    输出日志("【数据】搜索结果页采集到 " + 商品数量 + " 个商品")
    
    如果 商品数量 == 0:
        输出日志("【警告】搜索无结果,关键词可能无效或被屏蔽")
    结束如果
    
    输出日志("【进度】开始逐条采集商品详情...")
    # ... 采集逻辑 ...
    
    输出日志("【退出】Fetch_ProductList | 状态=成功 | 采集数=" + 商品数量)
    
Catch:
    输出日志("【错误】Fetch_ProductList执行异常 | 错误信息:" + 获取错误信息())
    输出日志("【退出】Fetch_ProductList | 状态=失败")
    截图保存("error_Fetch_ProductList.png")
EndTry

L2-运行报告:每日复盘的核心

运行报告是流程执行完成后自动生成的摘要,告诉你这个流程跑了多久、处理了多少数据、有没有报错。

运行报告的生成方式:

picture.image

# ===== 在流程开始处初始化报告数据 =====
设置变量(报告_开始时间 = 获取当前时间())
设置变量(报告_流程名称 = "淘宝商品采集")
设置变量(报告_执行状态 = "运行中")
设置变量(报告_总数据量 = 0)
设置变量(报告_错误次数 = 0)
设置变量(报告_错误列表 = [])

# ===== 流程执行过程中更新 =====
# 每采集一批数据就累加
设置变量(报告_总数据量 = 报告_总数据量 + 本次采集数)

# 发生错误时记录
如果 发生错误:
    设置变量(报告_错误次数 = 报告_错误次数 + 1)
    将 错误信息 加入列表(报告_错误列表)
结束如果

# ===== 流程结束处生成报告 =====
设置变量(报告_结束时间 = 获取当前时间())
设置变量(报告_耗时 = 计算时间差(报告_开始时间, 报告_结束时间))

如果 报告_错误次数 == 0:
    设置变量(报告_执行状态 = "成功")
否则:
    设置变量(报告_执行状态 = "部分成功")
    如果 报告_总数据量 == 0:
        设置变量(报告_执行状态 = "失败")
    结束如果
结束如果

# ===== 写入运行报告表格 =====
报告行 = [
    获取当前日期(),
    报告_流程名称,
    报告_执行状态,
    报告_总数据量,
    报告_错误次数,
    报告_开始时间,
    报告_结束时间,
    报告_耗时,
    报告_错误列表  # 转为文本
]

# 追加写入运行报告Excel
追加行数据到表格("C:/logs/运行报告.xlsx", 报告行)

# ===== 如果失败则发送通知 =====
如果 报告_执行状态 == "失败":
    发送飞书消息(Webhook=告警群, 消息="【失败】" + 报告_流程名称 + " 执行失败,请查看日志")
结束如果

运行报告表格结构:

日期流程名称状态数据量错误数开始时间结束时间耗时错误摘要
2026-07-01淘宝商品采集成功150008:0008:1212分钟-
2026-06-30拼多多价格监控部分成功89314:0014:2525分钟3个商品采集超时
2026-06-29小红书笔记采集失败0110:0010:055分钟登录态失效

这个表格坚持记录一个月,就能看到哪些流程不稳定、哪些时间段容易出错。


L3-错误截图:可视化证据

光有日志文字不够,出错时看一眼截图就知道当时页面是什么状态——是加载失败、弹窗遮挡、还是页面改版了。

影刀RPA实操路径: 指令面板搜索“屏幕截图”,拖入Catch块中。

# ===== 错误截图的标准写法 =====
Try:
    # 可能出错的指令
    点击元素("//button[@id='submit']")
Catch:
    # 1. 先截图
    设置变量(截图时间 = 获取当前时间戳())
    设置变量(截图路径 = "C:/logs/error_screenshots/" + 截图时间 + "_" + 流程名称 + ".png")
    屏幕截图(保存路径=截图路径)
    
    # 2. 再记录日志
    输出日志("【错误】已保存截图:" + 截图路径)
    
    # 3. 截图路径也写入运行报告
    将 截图路径 加入列表(报告_错误截图列表)
EndTry

截图文件命名规范:

YYYYMMDD_HHMMSS_流程名称_错误类型.png
示例:20260701_083012_淘宝商品采集_元素未找到.png

容易踩的坑:

  • 截图保存路径要确保存在。流程开始前用“创建文件夹”指令确认目录已存在。
  • 社区版截图功能有限制,频繁截图可能失败。只在Catch块里截图,不要在循环内每轮都截。

日志自动清理策略

日志文件会越积越多,硬盘满了流程就跑不动了。日志需要定期清理。

清理策略:

日志类型保留周期清理方式
执行日志(影刀自动生成)30天影刀客户端自动清理
运行报告(Excel)永久年终归档,每年新建一个文件
错误截图90天流程中自动删除90天前的截图

自动清理脚本(放在流程开头执行):

# ===== 清理90天前的错误截图 =====
# 用Python代码在流程中定期清理
import os
import time
from datetime import datetime, timedelta

截图目录 = "C:/logs/error_screenshots/"
截止时间 = time.time() - 90 * 24 * 60 * 60  # 90天前的时间戳

for filename in os.listdir(截图目录):
    filepath = os.path.join(截图目录, filename)
    if os.path.isfile(filepath):
        file_mtime = os.path.getmtime(filepath)
        if file_mtime < 截止时间:
            os.remove(filepath)
            print("已删除旧截图:" + filename)

每日运行报告自动推送

每天早上8点,自动汇总昨天的所有运行记录,推送到飞书/企业微信群。

# ===== 子流程:Send_DailyReport =====
# 定时在每天早上8点执行

# 1. 读取昨天的运行报告
昨日日期 = 获取昨天日期()
读取Excel文件("C:/logs/运行报告.xlsx", 输出变量=all_records)

# 2. 筛选昨天的记录
设置变量(yesterday_records = [])
按列表循环(all_records, 循环项=row):
    如果 row[0] == 昨日日期:  # 第一列是日期
        将 row 加入列表(yesterday_records)
    结束如果
结束循环

# 3. 统计
总流程数 = 获取列表长度(yesterday_records)
成功数 = 0
失败数 = 0
总数据量 = 0

按列表循环(yesterday_records, 循环项=row):
    如果 row[2] == "成功":  # 第三列是状态
        成功数 = 成功数 + 1
    否则:
        失败数 = 失败数 + 1
    结束如果
    总数据量 = 总数据量 + row[3]  # 第四列是数据量
结束循环

# 4. 组装消息
消息 = """
📊 **RPA运行日报 - {昨日日期}**
━━━━━━━━━━━━━━━━━━
📋 执行流程数:{总流程数}
✅ 成功:{成功数}
❌ 失败:{失败数}
📦 总采集数据量:{总数据量} 条

{状态详情}
━━━━━━━━━━━━━━━━━━
"""

# 如果有失败的,单独列出来
如果 失败数 > 0:
    状态详情 = "⚠️ 失败流程:"
    按列表循环(yesterday_records, 循环项=row):
        如果 row[2] != "成功":
            状态详情 = 状态详情 + "\n  - " + row[1] + "(" + row[8] + ")"  # 流程名称+错误摘要
        结束如果
    结束循环
否则:
    状态详情 = "✅ 所有流程执行正常"
结束如果

# 5. 发送
调用子流程(Send_FeishuNotification, 
    输入参数: 
        msg_type="info",
        title="RPA运行日报 - " + 昨日日期,
        content=消息,
        mention_all=失败数 > 0  # 有失败才@所有人
)

常见问题速查

问题原因解决方法
日志里没有错误信息没加输出日志指令关键节点都要加输出日志
日志太多找不到关键信息日志级别没区分用信息/警告/错误三种级别
截图保存失败目录不存在流程开始前创建目录
运行报告Excel被占用查看时流程也在写入写入时先关闭表格
日志文件越来越大没做清理配置自动清理策略
第二天忘了看运行报告没人提醒配置自动推送日报

推荐资源

  • 影刀官方《日志系统使用指南》——社区学院课程
  • 我的日志模板文件:包含三个层级的日志标准写法,新流程直接复制粘贴框架

#影刀RPA #RPA自动化 #日志系统 #运行报告 #流程规范

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论