logdigest について
logdigest は CI やテストのログから検出可能な失敗の証拠を抽出し、近接する行をまとめて元の行番号を保持します。長いログを確認する開発者向けです。パターン検出で情報を絞り込みますが、根本原因の診断は行いません。
主な機能
- 01テスト失敗、エラー、非ゼロ終了の検出
- 02近接する一致行のセクション化
- 03元の行番号の保持
- 04スタックのコンテキスト取得
- 05JSON または可読形式で出力
活用シーン
- 01長い CI ログから失敗箇所を確認
- 02失敗したテストとスタックの文脈を特定
- 03ダイジェストから元ログの行へ移動
MCP 対応
MCP サーバーは `digest_log` ツールを公開し、ログファイルのパスを受け取って CLI の JSON 出力と同じレポートを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 6 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 確認する対象パス |
詳細
logdigest
ログファイルを失敗の証拠に絞り込みます。
CI やテストのログは1万行に及ぶことがありますが、誰もが読むのは、失敗したテスト、エラー行、スタック、ゼロ以外の終了コードといった、いくつかの失敗セクションだけです。logdigest はログファイルを読み込み、該当する行を見つけ、元の行番号とともにセクションごとにまとめ、1画面で読めるダイジェストを出力します。失敗セクションが見つかった場合は 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
以下のツールを公開します。
path引数(確認するログファイル)を受け取るdigest_log。CLI の--json出力と同じレポートを返します。
検出対象
パターンに基づいて検出します。該当する各行には、必ず1つのルールが割り当てられます。複数のパターンに一致する場合は、最も具体的なルールが優先されます(TEST-FAIL、EXIT-NONZERO、ERROR-LINE の順)。
| ルール | パターン | 備考 |
|---|---|---|
| TEST-FAIL | FAIL 、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行以内の場合、1つのセクションにまとめられます。それより間隔が広い場合は、新しいセクションが始まります。
- スタックの先頭(
Traceback行、実行中のスタックの最初のat行、または直後にスタック行が続く一致行)の後は、最大5行をコンテキストとして追加取得し、スタックの先頭がダイジェストに残るようにします。次のセクションに入ることはありません。 - 各セクションは1つの検出結果になります。
lineはセクションの最初の行番号、evidenceは最初に一致した行です。また、検出結果にはendLineと取得したsectionLinesも含まれます。 - スタックの先頭またはアサーションを含む TEST-FAIL または ERROR-LINE のセクションの重大度は
high、それ以外はmediumです。空のログでは、ルールがEMPTY-LOGのinfo検出結果が1つ生成されます。 - レポートには、
totalLines、matchedLines、sections(実際に出力されたセクション)、sectionsTotal、overflowSectionsと、ルールごとの件数が含まれます。 - 判定:セクションが1つ以上ある場合は
FAILURES-FOUND、それ以外はNO-FAILURESです。空のログは、上記のEMPTY-LOG検出結果を含むNO-FAILURESになります。 - 検出結果は最大200セクションです。上限を超えたセクションは出力されませんが、レポートで黙って切り捨てられることがないよう、
overflowSectionsに件数が記録されます。 - 人が読みやすいダイジェストでは、各セクションの行範囲に続けて、取得した行をそのまま(各行200文字に制限して)出力し、その後に合計を表示します。出力は決定的です。タイムスタンプは含まず、ファイルの内容だけで決まります。
制限事項
- 検出はパターンベースのため、上の表にあるパターンに当てはまらない、これまでにない言い回しのエラーは見逃されることがあります。
NO-FAILURESという判定は「既知のエラーパターンが見つからなかった」という意味であり、実行が成功したことを証明するものではありません。 - logdigest は要約を行いますが、診断は行いません。エラー行とその直近のコンテキストを提示しますが、提示された行を超える根本原因の分析は読者に委ねられます。
- 出力されるのは最初の 200 セクションのみ(残りは件数のみ表示)で、整形された各行は 200 文字に切り詰められます。そのため、ダイジェストは元のログを読むための手掛かりであり、ログのコピーではありません。元の行番号は常に保持されるため、ソースログで各セクションを見つけられます。
開発
npm install
npm run build
npm test
コア部分は src/core.ts にあり、Node の標準ライブラリのみを使用します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。