影刀RPA新手教程:日志就是流程的黑匣子——写日志的正确粒度
流程半夜挂了,你早上打开电脑,只看到一个红色的报错弹窗和一句看不懂的错误代码,这是每个做影刀RPA的人都经历过的崩溃时刻。我第一次遇到的时候,流程已经跑了两百多行指令,挂在哪一步、当时页面上是什么状态,全都无从知晓,最后只能人肉把流程分段重跑,折腾了一整个下午。
那次以后我彻底想明白了一件事:日志就是流程的黑匣子。飞机出事靠黑匣子还原现场,流程出问题就靠你自己埋下的日志。影刀RPA本身自带运行日志面板,但它只会替你记报错,不会替你记"流程走到哪了、数据长什么样"——这些要靠你主动用日志指令往里写。写多了刷屏,写少了没用,粒度怎么把握,就是这篇要讲透的事。
我非技术出身,做了两年多电商自动化,日常维护着十几个定时任务,这篇用的是我真实排查过的案例:一次拼多多采集任务的夜间失败,从黑匣子缺失的教训,到后来我怎么设计日志层级,一步步讲给你。
环境准备:先认识日志住在哪里
还没装影刀RPA的先去官网下载安装,装完按提示装浏览器插件。界面三块:左边应用列表、中间指令编排区、右边指令详情面板。运行日志在编辑器下方的面板里,点运行后,每条指令的执行情况和输出内容都会实时滚出来。
社区版每天30分钟运行时长,调试日志密集的流程够用;创业版无限制,适合挂定时任务长期跑。调试日志这件事和版本还有个关系:定时任务和接口调度执行时不能调试,只能靠日志还原现场,所以定时任务流程的日志要写得更细。
日志相关的指令在右侧指令面板搜"日志"就能找到,核心就一个"打印日志"指令,Python环境里则是一套更完整的日志模块,这个下一节展开。
日志的四个级别:debug、info、warning、error怎么分工
影刀RPA的Python模块xbot.logging提供了四级日志,官方文档的定义很清楚:debug记调试信息,info记普通信息,warning记警告信息,error记错误信息,四种都会打印在运行日志面板里。
importxbot# 四级日志的标准用法,官方示例改造defmain(args):# debug:开发调试期用,上线后可以不管xbot.logging.debug('进入采集子流程,参数:店铺A')# info:记录正常流转,生产日志的主力xbot.logging.info('第3页采集完成,本页20条')# warning:没挂但不对劲,值得留意xbot.logging.warning('价格为空,跳过该商品')# error:挂了,必查xbot.logging.error('打开网页失败:打开Chrome网页失败')级别不是摆设,它是你事后过滤日志的抓手。我自己的分工标准:info记录"流程在正常干活",一条日志对应一个业务动作;warning记录"异常但可自动处理"的情况,比如某条数据缺字段跳过了;error只在Catch块里出现,出现就意味着要人介入。debug只在开发期加,上线前清理掉或者留着不碍事。
新手最常见的错误是把所有日志都用info写,挂了以后翻几百条info找线索。级别用起来,error永远是你的第一入口。
日志粒度的三层设计:模块级、分支级、数据级
粒度怎么定?我用的是三层结构,按信息的重要性从粗到细铺。
第一层:模块级日志。每个子流程的开始和结束各一条info,格式固定:“开始执行A02_搜索采集,店铺:A,关键词:连衣裙”。有开始必有结束,两条日志对不上,中间就出过事——这是我排查夜间失败任务的基本盘。
第二层:分支级日志。每个IF判断、每次循环的关键节点写一条。比如翻页循环里"当前第5页,下一页按钮存在",数据校验里"校验通过35条,剔除2条"。分支日志的价值在于回答"流程为什么走了这条路",很多时候流程没报错但结果不对,靠的就是分支日志倒推。
第三层:数据级日志。只在两种地方写:一是处理关键样本时,比如"当前商品标题:xxx,价格:89.9";二是变量可疑的时候。这一层最容易写过头,循环几百次每次都写全量数据,日志直接爆炸。
| 层级 | 写什么 | 频率 |
|---|---|---|
| 模块级 | 子流程进出,带参数摘要 | 每个子流程2条 |
| 分支级 | 判断走向、循环进度 | 每个关键节点1条 |
| 数据级 | 关键样本、可疑变量 | 抽样或异常时 |
官方文档里有句话我特别认同,排查Excel循环报错时给的提示就是:不知道循环项为什么报错,优先打印日志看看拿到的是什么变量。数据级日志的真正用途就是这种时刻——提前埋好,出事时现场还在。
一条真实案例:一场夜间失败的完整复盘
讲讲让我悟出这套粒度设计的原始事故。一个拼多多店铺的夜间采集任务,计划任务每天凌晨1点跑,某天早上数据只写了一半,运行记录里只有一句超时报错。
第一次排查:我什么日志都没埋,只能人肉分段跑,先怀疑翻页,再怀疑等待时间不够,折腾到中午才定位到是搜索结果页偶发弹了个登录引导弹窗,挡住了列表元素。这个弹窗白天从来不出来,夜间才偶发,没有现场,纯靠猜。
修复方案是两层:处理上加"判断元素是否存在",存在就先关弹窗;日志上按三层结构补齐。改造后的Catch块成了这样:
importxbotimporttime# 统一的异常记录:错误信息+时间戳,方便对账defcatch_log(module_name,err):# 模块级前缀,一眼看出挂在哪个子流程prefix='[ERROR]['+module_name+']'# 时间戳用于跨日志对齐,秒级够了ts=time.strftime('%Y-%m-%d %H:%M:%S')xbot.logging.error(prefix+ts+' '+str(err))第二次翻车的时候,日志直接把现场拍在我脸上:模块级日志显示A02进去了没出来,分支日志停在"第7页,下一页按钮存在",error里是错误详情。从发现到定位,五分钟。同一个坑,前后两种体验,差别就是日志粒度。
让日志更好排查的三个格式习惯
粒度之外,格式也有讲究,三个习惯是实战里磨出来的。
第一,统一前缀。每条日志带上模块编号,A02_、A03_这样,几百行日志用Ctrl+F一搜就能按模块切段。第二,关键变量入库。日志里写变量时先转成字符串,列表和字典直接拼会内容难读,用str()包一层。第三,循环里加进度计数,比如"已处理58/230",跑长任务时你知道它活着,卡住时你知道卡在哪。
还有个反习惯要提:别在循环里打印整个数据列表。影刀RPA操作大Excel时,官方文档专门点名"循环excel内容并打印日志"是引发内存不足的场景之一——打印日志看着无害,量大了一样压垮内存。日志写摘要,不写全量。
日志之外:断点调试是日志的黄金搭档
日志解决"事后还原",断点调试解决"现场抓捕",两个搭配用排查效率翻倍。影刀RPA的调试功能只在编辑器里打开应用时可用,计划任务和接口调度时不行,这也反向说明定时任务为什么必须把日志写细。
断点用法:鼠标移到指令行号后面的空白处点击,出现橙色圆点就是断点。运行到断点整条应用暂停,断点那条指令不会执行;下方调试变量面板能看到所有已定义变量的实时值和类型;点继续跑向下一段,点单步调试执行一条停一条。
我的标准排查组合拳:先看日志定位到模块,再在该模块的可疑指令前打断点带参数运行,用变量面板对比"日志里记录的值"和"实际运行时的值",差异处就是问题所在。文档里给的示例也印证这套打法:Excel对象变量是None导致后续报错,断点一打、变量面板一看,原因直接可见。
从日志到告警:让流程主动开口说话
日志写到第三个阶段,就该让流程主动通知你了。我的封装是一个告警子流程:Catch块调用它,内部做三件事——写error日志、截一张屏幕截图存进带时间戳的文件夹、通过飞书群机器人的Webhook发一条消息。
消息内容三样就够:流程名、挂的模块、错误摘要。Webhook地址做成流程参数,测试和生产的群分开,不然调一次试刷一次群,同事会来敲你桌子。邮件发送指令也能做同样的事,看团队习惯选。
| 手段 | 时机 | 作用 |
|---|---|---|
| 运行日志 | 全程 | 黑匣子,事后还原 |
| 错误截图 | 挂掉瞬间 | 保存页面现场 |
| 飞书/邮件告警 | 挂掉瞬间 | 把人拉回现场 |
截图这个动作经常被忽略,但它解决日志解决不了的问题:页面当时长什么样。弹窗是哪种、列表空没空、是不是被登录页顶掉了,一张图全知道。截图保存路径按日期分文件夹,保留一周足够回溯。
平台实战里日志的特殊坑
多平台采集时日志还有平台特性的坑要埋。淘宝、天猫这类强登录平台,Cookie过期后页面会静默变成登录页,流程不报错但采到的全是垃圾——所以第一步的登录检测要写日志,"登录态检测:通过/失效"各打一条,失效直接走告警分支。
TEMU、小红书这类无限滚动的页面,分支日志要记滚动次数和元素数量对比,“第5次滚动,元素从40变40,判定到底”,这条日志能帮你区分"真的到底了"和"加载卡住了"两种完全不同的局面。抖音页面的class带哈希值会变,定位失效时的日志要带上当前捕获的元素属性快照,方便比对改版点。
易错速查:日志相关高频问题
收尾照例上速查表,这几条都是我自己或群友真金白银踩出来的:
- 挂了以后日志只有一句报错:Catch块里没写模块名和上下文,按三层粒度补埋点
- 循环里打印日志导致卡慢:数据级日志写摘要不写全量,大Excel改用pandas处理
- 日志里变量显示看不懂:列表字典用str()转字符串再拼,关键样本单独成行
- 定时任务没法调试:编辑器外不能打断点,只能靠日志和截图还原现场
- error混在info里找不到:四级日志分工要守住,error只在异常分支出现
- 飞书告警把群刷屏:告警只发error级别,加去重逻辑,同一错误半小时内不重发
延伸阅读与资源
xbot.logging模块的官方文档篇幅不长,四个级别各配一个可运行的示例,建议照着敲一遍找手感;"如何调试影刀应用"那篇官方文档是断点调试最好的教材,比任何二手教程都准。
我模板里的三层日志封装、告警子流程和错误截图的完整写法,完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造。日志粒度这东西没有唯一正确答案,先抄我的三层结构跑两周,再按你自己流程的挂点调整,两轮下来你就知道自己的黑匣子该录什么了。
#影刀RPA #RPA自动化 #日志排查 #调试技巧 #定时任务
作者:林焱