Previews support the same Workers Observability features as production — logs, traces, metrics, and Tail Workers — configured independently so your Preview telemetry stays separate.
Enable logs and traces for Previews in your previews block. These settings are independent from production, so you can run full sampling on a Preview without affecting production telemetry.
{
"observability": {
"enabled": true,
"logs": { "enabled": true, "invocation_logs": true }
},
"previews": {
"observability": {
"enabled": true,
"logs": {
"enabled": true,
"invocation_logs": true,
"persist": true
},
"traces": {
"enabled": true,
"head_sampling_rate": 1,
"persist": true
}
}
}
}[observability]
enabled = true
[observability.logs]
enabled = true
invocation_logs = true
[previews.observability]
enabled = true
[previews.observability.logs]
enabled = true
invocation_logs = true
persist = true
[previews.observability.traces]
enabled = true
head_sampling_rate = 1
persist = trueOnce enabled, Preview logs and traces appear in the Cloudflare dashboard under the individual Preview's Observability tab. You can also configure these settings per Preview in the dashboard under Settings > Observability.
Tail Workers receive execution metadata from your Worker — request URLs, response status codes, console logs, and errors. You can configure a Tail Worker destination for production, for Previews, or both.
{
"tail_consumers": [
{ "service": "my-tail-sink" }
],
"previews": {
"tail_consumers": [
{ "service": "my-tail-sink" }
]
}
}[[tail_consumers]]
service = "my-tail-sink"
[[previews.tail_consumers]]
service = "my-tail-sink"When you deploy a Preview with npx wrangler preview --json, the output confirms whether Tail Worker destinations are attached. You can also configure Tail Worker destinations per Preview in the dashboard under Settings > Observability > Tail Worker.
Preview invocation metrics are available through the GraphQL Analytics API. Query the workersInvocationsAdaptive dataset with isPreview: 1 to filter for Preview traffic.
query PreviewMetrics($accountTag: String!, $since: Time!) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
workersInvocationsAdaptive(
limit: 100
filter: { datetime_geq: $since, isPreview: 1 }
) {
dimensions {
datetime
scriptName
previewSlug
status
}
sum {
requests
errors
}
}
}
}
}Useful fields include scriptName (Worker name), previewSlug (Preview name), and status.
Per-Preview metrics are also visible in the dashboard under the Preview's Metrics tab.
You can also query Preview observability data using the Workers Observability MCP server ↗.
Preview observability shows what happened inside the Worker. Browser Run can add the browser-side view of the same change — open the Preview URL, exercise a flow, and capture a screenshot or PDF.
Include a debug ID in the URL or request headers so the browser traffic can be correlated with the Preview's logs and traces in Workers Observability.
# Deploy the Preview
npx wrangler preview --name my-feature
# Capture a screenshot of the Preview URL
curl "https://YOUR_BROWSER_RUN_WORKER.workers.dev/screenshot?url=https://my-feature-my-worker.subdomain.workers.dev&debugId=review-123"Browser Run is not required — you can also use curl, Playwright, integration tests, or any other tool to send traffic to the Preview URL. Browser Run is useful when you want the review artifact to include what a browser actually rendered.
For GitHub Actions examples that create a Preview URL, probe it, capture a screenshot, or post it back to a pull request, refer to Examples.
You can export Preview telemetry to your existing observability stack using OpenTelemetry-compliant exports or Workers Logpush. Configure these in the previews block to keep Preview exports separate from production.
wrangler taildoes not support targeting Previews.