還有一個非常有用的 Hook:記錄工具輸入日誌 (Logger)。
當你開發複雜的 Agent 或自定義工具時,你經常想知道 Claude 到底傳了什麼參數進去。 雖然終端會顯示,但有時候你需要結構化的日誌。
日誌 Hook 實現
我們可以利用 jq 工具把 Hook 的輸入轉存到檔案中。
Claude Code 傳遞給 Hook 的數據是在環境變數或標準輸入中(取決於具體實現細節,通常作為 stdin 傳給 command)。
注意: Claude Code 目前向 Hook 傳遞數據的方式通常是將 JSON 寫入 stdin。
{
"type": "tool_use",
"name": "Edit",
"input": { ... },
"hook_event_name": "Stop",
"stop_hook_active": false
}
可以看到,不同 Hook 的輸入差異非常大,這使得編寫 Hook 變得困難——你不一定知道該解析哪些字段。
建議做一個輔助 Hook 來記錄輸入:
"PostToolUse": [ // Or "PreToolUse" or "Stop", etc
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "jq . > post-log.json"
}
]
},
]
該命令會把 Hook 輸入寫入 post-log.json,方便你觀察真實結構,從而更容易編寫穩定的 Hook。