影刀RPA进阶教程_日志系统搭建让每个流程都有完整的执行轨迹
影刀RPA进阶教程日志系统搭建——让每个流程都有完整的执行轨迹影刀RPA日志系统是被大多数新手忽视的基础设施。流程跑着跑着挂了不知道在哪一步挂的、处理了多少条数据、为什么挂——因为没有日志。本文帮你从零搭建一套标准化日志系统让流程的执行过程透明可控。作者林焱 | 影刀RPA进阶系列没有日志的痛苦假设你周一早上发现周末两天的采集数据都没入库。没有日志的情况下不知道流程什么时候停的周六上午还是周日晚上不知道停了的时候处理了多少条数据要从头重跑还是接着跑不知道停的原因网络超时登录过期服务器重启只能全部重跑浪费时间和资源有日志的情况下看眼日志文件5秒定位问题。店群矩阵自动化突破运营极限日志的三个等级不要什么信息都记日志要分层等级内容示例INFO正常流程节点“开始采集第3页”、“登录成功”WARNING不影响运行但需关注“第5页数据为空跳过”、“重试第2次”ERROR流程失败/异常“登录失败账号密码错误”、“元素#submit未找到”日志系统设计importloggingimportosfromdatetimeimportdatetimeclassFlowLogger: 影刀流程专用日志系统 def__init__(self,flow_name,log_dirC:/logs/):self.flow_nameflow_name# 按日期创建日志目录todaydatetime.now().strftime(%Y-%m-%d)self.log_diros.path.join(log_dir,today)os.makedirs(self.log_dir,exist_okTrue)# 日志文件路径self.log_fileos.path.join(self.log_dir,f{flow_name}_{datetime.now().strftime(%H%M)}.log)# 配置loggerself.loggerlogging.getLogger(f{flow_name}_{datetime.now().timestamp()})self.logger.setLevel(logging.INFO)# 文件处理器file_handlerlogging.FileHandler(self.log_file,encodingutf-8)file_handler.setLevel(logging.DEBUG)# 控制台处理器可选console_handlerlogging.StreamHandler()console_handler.setLevel(logging.INFO)# 日志格式formatterlogging.Formatter(%(asctime)s | %(levelname)-7s | %(message)s,datefmt%Y-%m-%d %H:%M:%S)file_handler.setFormatter(formatter)console_handler.setFormatter(formatter)self.logger.addHandler(file_handler)self.logger.addHandler(console_handler)# 记录启动self.logger.info(f{flow_name}开始执行 )definfo(self,msg):self.logger.info(msg)defwarning(self,msg):self.logger.warning(msg)deferror(self,msg):self.logger.error(msg)defstep(self,step_name,step_numNone):记录流程步骤prefixf[步骤{step_num}] ifstep_numelseself.logger.info(f{prefix}{step_name})defsummary(self,stats_dict):记录统计摘要self.logger.info(---------- 执行摘要 ----------)forkey,valueinstats_dict.items():self.logger.info(f{key}:{value})self.logger.info(-------------------------------)defclose(self,successTrue):记录结束status成功ifsuccesselse失败self.logger.info(f{self.flow_name}执行{status}\n)在流程中集成日志以采集流程为例每个关键节点都记日志# 初始化日志logFlowLogger(淘宝竞品采集)try:# 登录log.step(开始登录,1)login_resultlogin_taobao(account,password)iflogin_result[success]:log.info(f登录成功账号{account[:3]}***)else:log.error(f登录失败{login_result[error]})log.close(successFalse)exit()# 搜索关键词列表keywords[蓝牙耳机,无线鼠标,机械键盘]log.info(f关键词列表{len(keywords)}个)total_collected0forkeywordinkeywords:log.step(f开始采集关键词{keyword})# 搜索search_resultsearch_keyword(keyword)log.info(f搜索结果{search_result[total]}条)# 翻页采集page1keyword_count0whilepage10:log.info(f 采集第{page}页)page_datacollect_page(keyword,page)ifnotpage_data:log.warning(f 第{page}页无数据停止翻页)breakkeyword_countlen(page_data)save_data(page_data)page1total_collectedkeyword_count log.info(f关键词{keyword}采集完成{keyword_count}条)# 摘要log.summary({采集关键词数:len(keywords),总数据量:total_collected,执行耗时:f{elapsed_seconds}秒,保存文件:output_file})log.close(successTrue)exceptExceptionase:log.error(f流程异常终止{str(e)})# 记录完整的错误堆栈importtraceback log.error(traceback.format_exc())log.close(successFalse)日志分析快速定位问题日志积累多了以后用脚本快速分析importpandasaspdimportreimportosdefanalyze_logs(log_dir,days7):分析最近的日志找出异常all_errors[]# 遍历日志文件forfilenameinos.listdir(log_dir):ifnotfilename.endswith(.log):continuefilepathos.path.join(log_dir,filename)withopen(filepath,r,encodingutf-8)asf:contentf.read()# 查找ERROR行errorsre.findall(r(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \| ERROR.*?\| (.*),content)fortimestamp,msginerrors:flow_namefilename.split(_)[0]all_errors.append({时间:timestamp,流程:flow_name,错误:msg,文件:filename})ifall_errors:dfpd.DataFrame(all_errors)df.to_excel(日志异常汇总.xlsx,indexFalse)# 统计各流程运行次数flow_stats{}forfilenameinos.listdir(log_dir):iffilename.endswith(.log):withopen(os.path.join(log_dir,filename),r,encodingutf-8)asf:contentf.read()flow_namefilename.split(_)[0]success_countcontent.count(执行成功)fail_countcontent.count(执行失败)flow_stats[flow_name]{成功:success_count,失败:fail_count,成功率:f{success_count/(success_countfail_count)*100:.1f}%if(success_countfail_count)0elseN/A}returnpd.DataFrame(flow_stats).T日志存储策略日志会随着时间越积越多要有清理策略temu店群自动化报活动案例# 日志保留规则 近7天保留所有日志 8-30天保留ERROR和WARNING级日志删除INFO级 30天以上压缩存档到 archive/ 目录  90天以上删除可以用影刀流程本身来做日志清理——再写一个小流程每周日自动清理过期日志。小结日志系统的核心价值不在于记了什么而在于出问题时能多快定位。几个原则关键节点必须记登录、翻页、保存、异常日志要带上下文第几页、第几条、什么关键词异常要记堆栈出错后至少知道哪一行代码崩了定期分析日志从日志里发现流程的薄弱环节花半小时搭建好日志模块以后排查问题节省的时间是百倍千倍。内容标签影刀RPA / 日志系统 / 流程监控 / 错误排查 / Python logging作者林焱本文是「影刀RPA从零到实战」系列文章之一持续更新实操技巧与避坑经验。