导入失败后日志里只有一句 import failed,没有批次号、行号和字段名,运维拿不到现场,只能让用户把 20 万行文件再传一次。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

logger.error('import failed batch=%s row=%s field=%s',
             batch_id, row_no, field)

异常被最外层统一捕获,原始堆栈和当前处理到第几行都没打出来。日志按天滚动,等用户反馈时当天的文件已经被清掉。这一点先确认清楚,后面就不用反复试。

「导入日志缺失」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

具体做法是,日志里带 batchId、行号和字段名 一行能定位到原文件位置;失败明细落库 保留三十天 不依赖日志文件;入口加 traceId 串联上传、解析、入库三段。

改完照着核一遍,再制造一次失败,日志里能直接看到 batch=20261114-03 row=48213 field=phone,按行号在原文件里一次找到。

作者 9823189