记录所有工具调用(执行前后),用于审计、调试、统计和错误追踪,并对敏感数据脱敏。
审计日志钩 - 工具调用审计是一项面向实际任务的技能,主要用于通过前 too call和后 too call hooks 记录所有工具调用, 用于:. 安全审计;Usage 统计。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
通过 before_tool_call 和 after_tool_call 钩子记录所有工具调用,用于:
在插件中注册钩子:
// 审计日志文件路径
const AUDIT_LOG = path.join(process.env.OPENCLAW_STATE_DIR || '~/.openclaw', 'audit.log');
api.registerHook("before_tool_call", async ({ event, ctx }) => {
const entry = {
ts: new Date().toISOString(),
event: "before_tool_call",
tool: event.tool.name,
params: JSON.stringify(event.tool.params).slice(0, 500),
session: ctx.sessionKey,
user: ctx.session?.senderId || 'unknown'
};
console.log("[AUDIT]", JSON.stringify(entry));
return {};
});
api.registerHook("after_tool_call", async ({ event, ctx }) => {
const entry = {
ts: new Date().toISOString(),
event: "after_tool_call",
tool: event.tool.name,
result: String(event.result).slice(0, 200),
error: event.error?.message || null,
duration: event.durationMs,
session: ctx.sessionKey
};
console.log("[AUDIT]", JSON.stringify(entry));
return {};
});
{"ts":"2026-04-01T23:00:00.000Z","event":"before_tool_call","tool":"exec","params":"{\"command\":\"ls -la\"}","session":"agent:main:feishu:direct:ou_xxx","user":"ou_xxx"}
{"ts":"2026-04-01T23:00:00.050Z","event":"after_tool_call","tool":"exec","result":"total 8\n\ndrwxr-xr-x 12 dc staff 384 Apr 1 23:00","error":null,"duration":50,"session":"agent:main:feishu:direct:ou_xxx"}
自动脱敏敏感字段:
function redactSensitive(obj) {
const sensitive = ['apiKey', 'token', 'password', 'secret'];
for (const key of Object.keys(obj)) {
if (sensitive.some(s => key.toLowerCase().includes(s))) {
obj[key] = '[REDACTED]';
}
}
return obj;
}
定期分析 audit.log:
# 统计工具调用次数 grep "before_tool_call" audit.log | jq -r .tool | sort | uniq -c | sort -rn # 统计错误次数 grep "after_tool_call" audit.log | jq -r '.error' | grep -v null | wc -l # 统计会话数 grep "before_tool_call" audit.log | jq -r .session | sort -u | wc -l
相关专题
热门下载
相关下载
精品课程
共1课时 | 164人学习
共0课时 | 0人学习
共1课时 | 205人学习