Where your delivery records go
Reporting is the same in all three cases: it counts served calls. Use one transport per
Worker, never both at once. The two logs tokens are not interchangeable: each endpoint
refuses the other’s token with
403 wrong_transport.
With the CloudFront kit, direct sending is the template parameter DsLogsToken; the
records also stay in the composer’s CloudWatch Logs.
Turn on direct sending
1
Ask doubleshift for a logs token for direct sending
Not your API key nor a Logpush token (Keys and tokens).
2
Store it as a Worker secret
3
Add the option and redeploy
apiKey and partnerId, keep passing ctx, then npx wrangler deploy. A missing
or empty secret leaves sending off, silently. Keep quietInfo at false while you
check the setup.Logpush
1
Ask doubleshift for a logs token for Logpush
Not the direct-sending token.
2
Enable Logpush on the Worker
Add
"logpush": true to the wrangler.jsonc of the Worker that runs the library
(logpush = true in wrangler.toml), then redeploy with npx wrangler deploy.3
Create the Logpush job
With a Cloudflare API token that has Logs Edit
(Logpush access),
Check
POST https://api.cloudflare.com/client/v4/accounts/<account id>/logpush/jobs with this body,
and leave logsToken unset.Logpush job
enabled in the response. Do not add the Event field: it carries request metadata.4
Check the first batch
Request an article as an AI agent, then read the job’s
last_complete and last_error. An upload
means Cloudflare delivered a batch; ask doubleshift to confirm processing.- The whole console output is exported,
page_urlincluded: the filter selects a Worker, not an event. Silent invocations still count toward Logpush usage.LogsandExceptionsshare 16,384 characters per invocation, then messages are truncated and dropped. - Keep the records in the console: no custom
logfunction that replaces it, andquietInfoatfalse.

