Perl 39:把合成日志从输入一路交接到报表
结课不是给前面文章再贴一份目录,而是确认当前 Course 入口能从头走到尾。fixtures/course.tsv 的五行 UTF-8 原始字节经 import 读取、解码、字段校验、duration 类型化、message NFC、reject 收集后,得到 accepted 四条与 rejected 一条;query 在 accepted JSON Lines 上执行 level、min-duration、contains 三类过滤;report 对 accepted 记录聚合、排序并输出 UTF-8 TSV。所有分支使用同一套 LogTool::Course 解析和 JSON Lines 契约,测试不允许坏行作为部分成功混入结果。
图:五字段合成日志的导入、查询与报表交接
1 | |
tools/replay.pl --case all 是交接入口:它先跑 --version,再跑 import、query-all、query-zero、literal-pattern、report,随后跑参数错误、缺文件、别名路径、坏字节、坏 JSON、目录输出、缺父目录、空输入、内核故障注入、输入 read/close 故障、数据契约和 worker/lifecycle 测试。系统 Perl 5.34 与精确 Perl 5.38.2 复跑均 exit 0;stdout 是 24 个 case 的 JSON 记录,stderr 为空。这个结果说明当前本地证据链可重跑,不等于整合总测试已经完成。
交接时要同时给出边界:--contains 是字面包含,不是用户正则;--min-duration 0 是合法数字过滤,不是未提供;空 query 是成功空集,坏 JSON 是失败;--output 文件发布在 close 成功后替换,但 rename 不等于断电持久化;reject 文件先发布,accepted 发布失败时二者不是联合原子事务。bin/logtool 的 POD 已写出这些边界,文章和 replay 只负责把它们变成可复跑事实。
练习:用户要求把这个工具直接投入高流量真实日志和 Windows 服务器,该如何答复?不能宣称已支持:本系列只处理合成输入,本机小规模故障与并发路径有证据;断电持久化、对抗性超长流、真实生产日志和其他平台依旧 NOT_RUN。复核证据见 completion/evidence/semantics/*replay-all.*,逐篇课程状态仍以写作计划和最终整合报告为准。








