跳转到内容
搜索文档

Workers Logs

最后更新 查看 MarkdownAgent 设置

Workers Logs 可让您自动收集、存储、过滤和分析 Cloudflare Workers 发出的日志数据。数据写入您的 Cloudflare 账户,您可以在仪表板中为每个 Worker 查询。所有新创建的 Worker 默认启用可观测性设置。

日志包括调用日志自定义日志、错误和未捕获的异常。

Workers Logs 仪表板示例

要将日志发送到第三方,请使用 Workers LogpushTail Workers

启用 Workers Logs

您必须为 Worker 添加可观测性设置才能将日志写入 Workers Logs。将以下设置添加到 Worker 的 Wrangler 文件并重新部署 Worker。

{
  "observability": {
    "enabled": true,
    "head_sampling_rate": 1 // optional. default = 1.
  }
}
[observability]
enabled = true
head_sampling_rate = 1

基于头部的采样(Head-based sampling) 允许您设置记录 Workers 请求的百分比。

在环境中启用

环境(Environments) 允许您使用不同配置部署同一 Worker 应用程序。例如,您可能想为 staging 和 production 配置不同的 head_sampling_rate。要为名为 staging 的环境配置可观测性:1. 在 [env.staging] 下添加以下配置

{
  "env": {
    "staging": {
      "observability": {
        "enabled": true,
        "head_sampling_rate": 1 // optional
      }
    }
  }
}
[env.staging.observability]
enabled = true
head_sampling_rate = 1
  1. 使用 npx wrangler deploy -e staging 部署 Worker
  2. 对每个环境重复步骤 1 和 2。

从仪表板查看日志

从 Cloudflare 仪表板访问 Worker 的日志:

  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. Overview(概览) 中,选择 Worker

  3. 选择 Observability(可观测性)

最佳实践

记录结构化 JSON 对象

要充分利用 Workers Logs,建议使用 JSON 格式记录日志。Workers Logs 会自动提取字段并在数据库中智能索引。这种结构化日志记录技术的优势在于,它允许您轻松按具有无限基数的字段的任何维度分割数据。考虑以下场景:

场景 日志代码 事件日志(部分)
1 console.log("user_id: " + 123) {message: "user_id: 123"}
2 console.log({user_id: 123}) {user_id: 123}
3 console.log({user_id: 123, user_email: "a@example.com"}) {user_id: 123, user_email: "a@example.com"}

这些示例之间的区别在于如何索引日志以实现更快的查询。在场景 1 中,user_id 嵌入在消息中。要查找与特定 user_id 相关的所有日志,必须运行文本匹配。在场景 2 和 3 中,可以按 user_iduser_email 键筛选日志。

功能

调用日志

每次 Workers 调用返回一条调用日志,包含 Request、Response 和相关元数据等详情。这些调用日志可通过字段 $cloudflare.$metadata.type = "cf-worker-event" 识别。每条调用日志都会用 Cloudflare 在调用上下文中可用的信息进行丰富。

在 Workers Logs UI 中,日志以本地化时间戳和消息呈现。消息取决于调用处理程序。例如,Fetch 请求的消息描述请求方法和请求 URL,而 cron 事件会列为 cron。以下是调用处理程序及其调用消息列表。

可以在 wrangler 中通过添加 invocation_logs = false 配置来禁用调用日志。

{
	"observability": {
		"logs": {
			"invocation_logs": false
		}
	}
}
[observability.logs]
invocation_logs = false
调用处理程序 调用消息
Alarm <Scheduled Time>
Email <Email Recipient>
Fetch <Method> <URL>
Queue <Queue Name>
Cron <UNIX-cron schedule>
Tail tail
RPC <RPC method>
WebSocket <WebSocket Event Type>

自定义日志

默认情况下,Worker 会发出包含请求、响应和相关元数据详情的调用日志

您还可以在整个代码中添加自定义日志。Worker 中的任何 console.log 语句都会在 Workers Logs 中可见。以下示例演示了 Worker 请求处理程序中的自定义 console.log

export default {
	async fetch(request) {
		const { cf } = request;
		const { city, country } = cf;

		console.log(`Request came from city: ${city} in country: ${country}`);

		return new Response("Hello worker!", {
			headers: { "content-type": "text/plain" },
		});
	},
};
addEventListener("fetch", (event) => {
	event.respondWith(handleRequest(event.request));
});

/**
 * Respond with hello worker text
 * @param {Request} request
 */
async function handleRequest(request) {
	const { cf } = request;
	const { city, country } = cf;

	console.log(`Request came from city: ${city} in country: ${country}`);

	return new Response("Hello worker!", {
		headers: { "content-type": "text/plain" },
	});
}

部署上述代码后,在仪表板或使用实时日志查看 Worker 的日志。

基于头部的采样

基于头部的采样允许您记录 Cloudflare Worker 传入请求的一定比例。对于高流量应用程序,这有助于减少日志量和管理成本,同时仍提供有意义的应用程序性能洞察。配置基于头部的采样率时,您可以控制被记录的请求百分比。请求上下文内的所有日志都会被收集。

要启用基于头部的采样,在可观测性配置中设置 head_sampling_rate。有效范围为 0 到 1,其中 0 表示一百个请求中零个被记录,1 表示每个请求都被记录。如果未指定 head_sampling_rate,默认配置为 1(100%)。在下面的示例中,head_sampling_rate 设置为 0.01,即每百个请求中记录一个。

{
	"observability": {
		"enabled": true,
		"head_sampling_rate": 0.01 // 1% sampling rate
	}
}
[observability]
enabled = true
head_sampling_rate = 0.01

限制

说明 限制
最大日志保留期 7 天
每个账户每天最大日志数1 50 亿
最大日志大小2 256 KB

1 每个账户每天有 50 亿条日志的限制。超出 限制后,当天剩余时间将应用 1% 的基于头部采样。

2 单条日志的最大大小限制为 256 KB。超出该大小的日志将被 截断,日志的 $cloudflare.truncated 字段将设置为 true。

定价

Workers Logs 包含在 Free 和 Paid Workers 计划中。

写入的日志事件 保留
Workers Free 每天 20 万 3 天
Workers Paid 每月包含 2000 万
+每额外百万 $0.60
7 天

示例

示例 1

Worker 每月处理 1500 万次请求。每个请求发出 1 条调用日志和 1 条 console.loghead_sampling_rate 配置为 1。

月费用 公式
Logs(日志) $6.00 ((15,000,000 requests per month * 2 logs per request * 100% sample) - 20,000,000 included logs) / 1,000,000 * $0.60
Total $6.00

示例 2

Worker 每月处理 10 亿次请求。每个请求发出 1 条调用日志和 1 条 console.loghead_sampling_rate 配置为 0.1。

月费用 公式
Logs(日志) $108.00 ((1,000,000,000 requests per month * 2 logs per request * 10% sample) - 20,000,000 included logs) / 1,000,000 * $0.60
Total $108.00

这篇文档对您有帮助吗?