mcpField
L
logdigest

logdigest

本地服务
github.com/CloudCorpRecords开发工具06 天前更新

关于 logdigest

logdigest 从 CI 和测试日志中提取可识别的失败证据,将相邻行归组,并保留原始行号。它适合需要检查长日志的开发者;其模式匹配用于压缩证据,不负责诊断根因。

主要功能

  1. 01识别测试失败、错误和非零退出
  2. 02将相邻匹配行归为片段
  3. 03保留原始行号锚点
  4. 04捕获堆栈上下文
  5. 05输出 JSON 或可读摘要

适用场景

  1. 01检查长篇 CI 日志中的失败片段
  2. 02定位失败测试及其堆栈上下文
  3. 03从摘要跳转到原始日志行

MCP 相关

MCP 服务提供 `digest_log` 工具,接收日志文件路径并返回与 CLI JSON 输出相同的报告。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-logdigest": {
"command": "npx",
"args": [
"-y",
"@reneturcios/logdigest"
]
}
}
}
启动命令npx -y @reneturcios/logdigest

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/logdigest0.1.0
ocighcr.io/cloudcorprecords/logdigest:0.1.0

工具

1

收录的工具列表 · 更新于 6 天前

参数类型必填说明
pathstring是要检查的目标路径

详细介绍

logdigest

将日志文件浓缩为失败证据。

CI 或测试日志可能长达一万行,但人们真正会阅读的部分只有少数几个失败片段:失败的测试、错误行、堆栈、非零退出。logdigest 会读取日志文件,找出这些行,按片段分组并保留原始行号,然后打印一份一屏即可读完的摘要。找到任何失败片段时,它会报告判定结果 FAILURES-FOUND;未找到时则报告 NO-FAILURES。

安装

npx @reneturcios/logdigest digest build.log

也可以全局安装:

npm install -g @reneturcios/logdigest

需要 Node 20 或更高版本。

CLI

logdigest digest [file] [--json]
logdigest mcp
logdigest --version
  • logdigest digest <file> 打印易读的摘要。
  • logdigest digest <file> --json 以 JSON 格式打印完整报告。
  • logdigest mcp 通过 stdio 运行 MCP 服务(见下文)。
  • logdigest --version 打印版本。

退出代码:判定结果为 NO-FAILURES 时返回 0,判定结果为 FAILURES-FOUND 时返回 1,发生用法错误或读取错误时返回 2(例如, 目标是目录或无法读取),读取器提前关闭输出管道时返回 141。

摘要示例:

logdigest digest test.log: FAILURES-FOUND
  2 failure section(s) found in 28 line(s): 9 matched line(s).
  [HIGH] TEST-FAIL lines 5-16
FAIL src/math.test.ts
    AssertionError: expected 3 to be 4
        at Object.<anonymous> (src/math.test.ts:10:11)
  totals: total lines 28, matched lines 9, sections 2, overflow sections 0
  by rule: TEST-FAIL 8, ERROR-LINE 1, EXIT-NONZERO 0

(以上示例经过了缩短;实际摘要会打印每个片段中捕获的所有 行。)

MCP

同一个二进制文件也是一个 MCP 服务:

npx @reneturcios/logdigest mcp

它提供一个工具:

  • digest_log,带有一个 path 参数(要检查的日志文件)。它 返回与 CLI --json 输出相同的报告。

检测内容

检测基于模式。每个匹配行只会分配给一条规则;当一行匹配多种模式时,优先采用最具体的规则(TEST-FAIL 优先于 EXIT-NONZERO,EXIT-NONZERO 优先于 ERROR-LINE)。

规则模式说明
TEST-FAILFAIL 、单词 failing(例如运行器摘要中的 2 failing)、✕、× 、not ok (TAP)、AssertionError,以及 expected ... to ... 这种形式测试运行器失败和断言失败
ERROR-LINE单词 error(任意大小写)、Error:、ERR!、fatal:、panic、Traceback、Exception通用错误证据,包括 Python 回溯和 npm ERR! 行
EXIT-NONZERO后接非零数字的 exit code 或 exited with code,以及短语 command failed退出代码为 0 不算匹配

片段和判定结果的工作方式

  • 相距不超过 3 行的匹配行会组成一个片段。 间隔更大时会开始一个新片段。
  • 在堆栈头之后(Traceback 行、一次运行中的第一条 at 堆栈行,或直接 后接堆栈行的匹配行),最多会额外捕获 5 行作为上下文,确保堆栈顶部 保留在摘要中。捕获内容不会跨越到下一个片段。
  • 每个片段会成为一条发现项。其 line 是片段的首行行号,evidence 是第一条匹配行;发现项还包含 endLine 和捕获的 sectionLines。
  • 对于包含堆栈头或断言的 TEST-FAIL 或 ERROR-LINE 片段,严重性为 high;其他情况为 medium。空日志会生成一条规则为 EMPTY-LOG、严重性为 info 的发现项。
  • 报告会统计 totalLines、matchedLines、sections(实际输出的片段数)、sectionsTotal、overflowSections,以及每条规则的计数。
  • 判定结果:至少有一个片段时为 FAILURES-FOUND,否则为 NO-FAILURES。空日志的判定结果为 NO-FAILURES,并包含上述 EMPTY-LOG 发现项。
  • 发现项最多包含 200 个片段。超出上限的片段不会输出,但会计入 overflowSections,因此报告不会悄然截断。
  • 在易读摘要中,每个片段会先打印其行号范围,再逐字打印捕获的行(每行截断至 200 个字符),最后打印总计。输出是确定性的:它完全由文件内容决定,不包含时间戳。

限制

  • 检测基于模式,因此,如果日志以新颖的方式描述失败,且不符合上表中的任何形式,就可能无法检测到。 NO-FAILURES 判定的含义是“未发现已知的失败形式”, 并不能证明运行成功。
  • logdigest 负责精简,不负责诊断。它会显示失败行及其紧邻上下文,但超出所显示行范围的根因分析需要读者自行完成。
  • 只会输出前 200 个区段(其余区段只计数),渲染后的行会截断至 200 个字符,因此摘要只是阅读原始日志的起点,并非原文副本。原始行号始终会保留,以便在源日志中找到任何区段。

开发

npm install
npm run build
npm test

核心代码位于 src/core.ts,仅使用 Node 标准库。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。