name: log-analysis-structurize description: 将原始日志语句结构化为 9 列 CSV 表格。输入搜索阶段输出的原始日志列表,输出标准化日志表格(编号/出现场景/组件/日志级别/日志内容/出现阶段/含义/下一步走向/代码位置)。触发词:结构化日志、日志表格、整理日志表格。
日志结构化器
将原始日志语句整理为 9 列标准化表格,为后续生成 Markdown 和故障模式库做准备。
触发词
结构化日志、日志表格、整理日志表格
输入
| 输入 | 必需 | 说明 |
|---|---|---|
| 原始日志列表 | 必需 | log-analysis-search 的输出(Markdown 列表格式) |
| 功能描述 | 必需 | 该日志属于哪个功能,如"缩P保D"、"PD建链" |
输出
| 输出 | 格式 | 说明 |
|---|---|---|
| 日志表格 | CSV 文件 | 9列:编号、出现场景、组件、日志级别、日志内容、出现阶段、含义、下一步走向、代码位置 |
9 列定义
| 列号 | 列名 | 说明 | 提取来源 |
|---|---|---|---|
| 1 | 编号 | 按执行顺序编排 | 人工判断 |
| 2 | 出现场景 | 什么触发条件导致这条日志 | 代码上下文(if 条件、调用链) |
| 3 | 组件 | 产出该日志的模块 | 代码所在目录/类名/命名空间 |
| 4 | 日志级别 | INFO / WARN / ERROR / DEBUG | 日志宏本身 |
| 5 | 日志内容 | 格式字符串,保留占位符 | 日志语句原文 |
| 6 | 出现阶段 | 在整个流程的哪个阶段 | 根据功能流程判断 |
| 7 | 含义 | 这条日志传达什么信息 | 解读日志内容 |
| 8 | 下一步走向 | 日志打出后流程走向哪里 | 代码中该语句之后的逻辑 |
| 9 | 代码位置 | 文件名:行号 | grep 结果 |
编号原则
- 按实际执行顺序编排,不是按代码文件位置
- 同一流程中先执行的排前面
- 同一日志被多处调用但执行顺序相同,只保留一条
- 不同执行路径产生的同一日志,按路径分别列条目(编号不同)
组件命名规范
直接写仓库级 + 子模块,粒度以子模块/子目录为界:
| 示例 | 是否正确 | 说明 |
|---|---|---|
llm/model |
✓ | 正确粒度 |
cmotor/router |
✓ | 正确粒度 |
pymotor/coordinator |
✓ | 正确粒度 |
vllm/scheduler |
✓ | 正确粒度 |
llm |
✗ | 太粗 |
pymotor/CoordinatorClass/handleRequest_inner |
✗ | 太细 |
出现阶段划分
根据功能流程划分阶段,常见阶段:
| 阶段 | 说明 |
|---|---|
| 初始化 | 服务启动、配置加载、资源申请 |
| 请求接入 | 接收推理请求、参数解析 |
| 路由分发 | 选择目标实例/节点 |
| 链路建立 | 建链、解链、重连 |
| 推理执行 | prefill、decode、采样 |
| 异常处理 | 重试、熔断、降级 |
| 资源释放 | 释放显存、清理缓存 |
| 状态查询 | 心跳、监控 |
CSV 格式
编号,出现场景,组件,日志级别,日志内容,出现阶段,含义,下一步走向,代码位置
1,收到建链请求,llm/model,INFO,"[model] Received link request from {peer}",初始化,通知收到建链请求,进入建链处理逻辑,src/model/link_manager.cpp:45
2,建链成功,llm/model,INFO,"[model] Link established, group_id={group_id}",初始化,链路已成功建立,进入就绪状态,src/model/link_manager.cpp:128
3,建链失败,llm/model,ERROR,"[model] Link failed, error_code={code}, peer={peer}",异常处理,链路建立失败,触发重试或告警,src/model/link_manager.cpp:145
- 日志内容用双引号包裹(因为内容可能含逗号)
- 占位符保留原样
- 代码位置只写相对路径(不含完整路径)
工作流程
第一步:确认功能流程
了解该功能从开始到结束的完整流程,划分阶段边界。
第二步:逐条填充表格
对每条原始日志,补充:
- 出现场景:什么条件会走到这条日志
- 组件:根据代码所在目录/类名确认组件
- 出现阶段:属于哪个阶段
- 含义:这条日志在说什么(简洁,不要复述日志内容)
- 下一步走向:打完这条日志后,代码接下来做什么
第三步:排序
按执行顺序给所有条目编号。
第四步:输出 CSV
保存为 CSV 文件,等待下一步校正(如有实际日志输入)。
注意事项
- 占位符(
{id}、%s、%d等)必须原样保留 - 编号按执行顺序,不是按代码文件位置
- 同一条日志在不同场景下出现时,按场景分别列条目(编号不同)
- 代码位置格式:
文件名:行号(不含完整路径) - 组件命名不要太粗也不要太细