[ PROMPT_NODE_24350 ]
Tail Workers API 参考
[ SKILL_DOCUMENTATION ]
# Tail Workers API 参考
## 处理器签名
typescript
export default {
async tail(
events: TraceItem[],
env: Env,
ctx: ExecutionContext
): Promise {
// 处理事件
}
} satisfies ExportedHandler;
**参数:**
- `events`: `TraceItem` 对象数组(每个生产者调用对应一个)
- `env`: 绑定 (KV, D1, R2, 环境变量等)
- `ctx`: 包含用于异步工作的 `waitUntil()` 的上下文
**关键:** Tail 处理器不返回任何值。请使用 `ctx.waitUntil()` 进行异步操作。
## TraceItem 类型
typescript
interface TraceItem {
scriptName: string; // 生产者 Worker 名称
eventTimestamp: number; // Epoch 毫秒数
outcome: 'ok' | 'exception' | 'exceededCpu' | 'exceededMemory'
| 'canceled' | 'scriptNotFound' | 'responseStreamDisconnected' | 'unknown';
event?: {
request?: {
url: string; // 默认脱敏
method: string;
headers: Record; // 敏感头部脱敏
cf?: IncomingRequestCfProperties;
getUnredacted(): TraceRequest; // 绕过脱敏 (请谨慎使用)
};
response?: {
status: number;
};
};
logs: Array;
exceptions: Array;
diagnosticsChannelEvents: Array;
}
**注意:** 官方 SDK 使用 `TraceItem`,而非 `TailItem`。请使用 `@cloudflare/workers-types` 获取准确类型。
## 时间戳处理
所有时间戳均为 **Epoch 毫秒数**,而非秒:
typescript
// ✅ 正确 - 直接与 Date 一起使用
const date = new Date(event.eventTimestamp);
// ❌ 错误 - 不要乘以 1000
const date = new Date(event.eventTimestamp * 1000);
## 自动脱敏
默认情况下,敏感数据会从 `TraceRequest` 中脱敏:
### 头部脱敏
包含以下子字符串的头部(不区分大小写):
- `auth`, `key`, `secret`, `token`, `jwt`
- `cookie`, `set-cookie`
脱敏后的值显示为 `"REDACTED"`。
### URL 脱敏
- **十六进制 ID:** 32 位以上十六进制数字 → `"REDACTED"`
- **Base-64 ID:** 21