@@ -346,6 +346,49 @@ async function processSyncJob(job: Job) {
346346}
347347```
348348
349+ ## Cloudflare Workers
350+
351+ Use the Workers adapter for structured logs and correct platform severity.
352+
353+ ``` typescript
354+ // src/index.ts
355+ import { initWorkersLogger , createWorkersLogger } from ' evlog/workers'
356+
357+ initWorkersLogger ({
358+ env: { service: ' edge-api' },
359+ })
360+
361+ export default {
362+ async fetch(request : Request ) {
363+ const log = createWorkersLogger (request )
364+
365+ try {
366+ log .set ({ route: ' health' })
367+ const response = new Response (' ok' , { status: 200 })
368+ log .emit ({ status: response .status })
369+ return response
370+ } catch (error ) {
371+ log .error (error as Error )
372+ log .emit ({ status: 500 })
373+ throw error
374+ }
375+ },
376+ }
377+ ```
378+
379+ Disable invocation logs to avoid duplicate request logs:
380+
381+ ``` toml
382+ # wrangler.toml
383+ [observability .logs ]
384+ invocation_logs = false
385+ ```
386+
387+ Notes:
388+ - ` requestId ` defaults to ` cf-ray ` when available
389+ - ` request.cf ` is included (colo, country, asn) unless disabled
390+ - Use ` headerAllowlist ` to avoid logging sensitive headers
391+
349392## API Reference
350393
351394### ` initLogger(config) `
@@ -362,6 +405,7 @@ initLogger({
362405 region ?: string // Deployment region
363406 },
364407 pretty?: boolean // Pretty print (default: true in dev)
408+ stringify ?: boolean // JSON.stringify output (default: true, false for Workers)
365409 include ?: string [] // Route patterns to log (glob), e.g. ['/api/**']
366410 sampling ?: {
367411 rates?: { // Head sampling (random per level)
@@ -479,6 +523,34 @@ log.emit() // Emit final event
479523log .getContext () // Get current context
480524```
481525
526+ ### ` initWorkersLogger(options?) `
527+
528+ Initialize evlog for Cloudflare Workers (object logs + correct severity).
529+
530+ ``` typescript
531+ import { initWorkersLogger } from ' evlog/workers'
532+
533+ initWorkersLogger ({
534+ env: { service: ' edge-api' },
535+ })
536+ ```
537+
538+ ### ` createWorkersLogger(request, options?) `
539+
540+ Create a request-scoped logger for Workers. Auto-extracts ` cf-ray ` , ` request.cf ` , method, and path.
541+
542+ ``` typescript
543+ import { createWorkersLogger } from ' evlog/workers'
544+
545+ const log = createWorkersLogger (request , {
546+ requestId: ' custom-id' , // Override cf-ray (default: cf-ray header)
547+ headers: [' x-request-id' ], // Headers to include (default: none)
548+ })
549+
550+ log .set ({ user: { id: ' 123' } })
551+ log .emit ({ status: 200 })
552+ ```
553+
482554### ` createError(options) `
483555
484556Create a structured error with HTTP status support. Import from ` evlog ` directly to avoid conflicts with Nuxt/Nitro's ` createError ` .
0 commit comments