[{"data":1,"prerenderedAt":2406},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-cloudflare-workers":429,"-frameworks-cloudflare-workers-surround":2401},[4,35,159,201,289,326,413],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,302,307,312,317,321],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"icon":301},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F1.stream-api","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":308,"path":309,"stem":310,"icon":311},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":313,"path":314,"stem":315,"icon":316},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F4.identity-headers","i-lucide-fingerprint",{"title":156,"path":318,"stem":319,"icon":320},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F5.recipes","i-lucide-chef-hat",{"title":322,"path":323,"stem":324,"icon":325},"Catalogs as packages","\u002Fbuild-on-top\u002Fcatalogs-as-packages","5.build-on-top\u002F6.catalogs-as-packages","i-lucide-package",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Adapters","\u002Fadapters","6.adapters",[331,334,374,389],{"title":41,"path":332,"stem":333,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":335,"path":336,"stem":337,"children":338,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[339,344,349,354,359,364,369],{"title":340,"path":341,"stem":342,"icon":343},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":345,"path":346,"stem":347,"icon":348},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":350,"path":351,"stem":352,"icon":353},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":355,"path":356,"stem":357,"icon":358},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":360,"path":361,"stem":362,"icon":363},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":365,"path":366,"stem":367,"icon":368},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":370,"path":371,"stem":372,"icon":373},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":375,"path":376,"stem":377,"children":378,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[379,384],{"title":380,"path":381,"stem":382,"icon":383},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":385,"path":386,"stem":387,"icon":388},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":390,"path":391,"stem":392,"children":393,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[394,399,404,408],{"title":395,"path":396,"stem":397,"icon":398},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":400,"path":401,"stem":402,"icon":403},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":405,"path":406,"stem":407,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":409,"path":410,"stem":411,"icon":412},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":414,"path":415,"stem":416,"children":417,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[418,421,425],{"title":41,"path":419,"stem":420,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":422,"path":423,"stem":424,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":426,"path":427,"stem":428,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":430,"title":266,"body":431,"description":2394,"extension":2395,"links":2396,"meta":2397,"navigation":2398,"path":267,"seo":2399,"stem":268,"__hash__":2400},"docs\u002F4.frameworks\u002F12.cloudflare-workers.md",{"type":432,"value":433,"toc":2381},"minimark",[434,447,496,500,505,576,580,833,864,881,910,913,916,1350,1416,1420,1427,1970,1973,1984,1988,1994,2281,2289,2293,2296,2325,2329,2343,2347,2377],[435,436,437,438,442,443,446],"p",{},"The ",[439,440,441],"code",{},"evlog\u002Fworkers"," adapter provides factory functions for creating request-scoped loggers with Cloudflare-specific context. Unlike framework integrations, Workers require manual ",[439,444,445],{},"log.emit()"," calls since there is no middleware lifecycle to hook into.",[448,449,452,455,482],"prompt",{":actions":450,"description":451,"icon":269},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Cloudflare Worker",[435,453,454],{},"Set up evlog in my Cloudflare Worker.",[456,457,458,462,465,468,476,479],"ul",{},[459,460,461],"li",{},"Install evlog: pnpm add evlog",[459,463,464],{},"Import initWorkersLogger and defineWorkerFetch from 'evlog\u002Fworkers'",[459,466,467],{},"Call initWorkersLogger({ env: { service: 'my-worker' } }) at the top level",[459,469,470,471,475],{},"In the fetch handler, use ",[472,473,474],"strong",{},"defineWorkerFetch"," (recommended) or createWorkersLogger(request, { executionCtx: ctx })",[459,477,478],{},"Use log.set() to accumulate context throughout the request",[459,480,481],{},"Call log.emit() manually before returning the response (no middleware lifecycle)",[435,483,484,485,491,492],{},"Docs: ",[486,487,488],"a",{"href":488,"rel":489},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fcloudflare-workers",[490],"nofollow","\nAdapters: ",[486,493,494],{"href":494,"rel":495},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[490],[497,498,20],"h2",{"id":499},"quick-start",[501,502,504],"h3",{"id":503},"_1-install","1. Install",[506,507,508,533,547,561],"code-group",{},[509,510,516],"pre",{"className":511,"code":512,"filename":513,"language":514,"meta":515,"style":515},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[439,517,518],{"__ignoreMap":515},[519,520,523,526,530],"span",{"class":521,"line":522},"line",1,[519,524,513],{"class":525},"sBMFI",[519,527,529],{"class":528},"sfazB"," add",[519,531,532],{"class":528}," evlog\n",[509,534,537],{"className":511,"code":535,"filename":536,"language":514,"meta":515,"style":515},"bun add evlog\n","bun",[439,538,539],{"__ignoreMap":515},[519,540,541,543,545],{"class":521,"line":522},[519,542,536],{"class":525},[519,544,529],{"class":528},[519,546,532],{"class":528},[509,548,551],{"className":511,"code":549,"filename":550,"language":514,"meta":515,"style":515},"yarn add evlog\n","yarn",[439,552,553],{"__ignoreMap":515},[519,554,555,557,559],{"class":521,"line":522},[519,556,550],{"class":525},[519,558,529],{"class":528},[519,560,532],{"class":528},[509,562,565],{"className":511,"code":563,"filename":564,"language":514,"meta":515,"style":515},"npm install evlog\n","npm",[439,566,567],{"__ignoreMap":515},[519,568,569,571,574],{"class":521,"line":522},[519,570,564],{"class":525},[519,572,573],{"class":528}," install",[519,575,532],{"class":528},[501,577,579],{"id":578},"_2-initialize-and-create-request-loggers","2. Initialize and create request loggers",[509,581,586],{"className":582,"code":583,"filename":584,"language":585,"meta":515,"style":515},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineWorkerFetch, initWorkersLogger } from 'evlog\u002Fworkers'\n\ninitWorkersLogger({\n  env: { service: 'my-worker' },\n})\n\nexport default defineWorkerFetch(async (request, _env, _ctx, log) => {\n  log.set({ action: 'handle_request' })\n\n  \u002F\u002F ... your handler logic\n\n  log.emit()\n  return Response.json({ ok: true })\n})\n","src\u002Fworker.ts","typescript",[439,587,588,622,629,642,670,679,684,732,765,770,777,782,795,826],{"__ignoreMap":515},[519,589,590,594,598,602,605,608,611,614,617,619],{"class":521,"line":522},[519,591,593],{"class":592},"s7zQu","import",[519,595,597],{"class":596},"sMK4o"," {",[519,599,601],{"class":600},"sTEyZ"," defineWorkerFetch",[519,603,604],{"class":596},",",[519,606,607],{"class":600}," initWorkersLogger",[519,609,610],{"class":596}," }",[519,612,613],{"class":592}," from",[519,615,616],{"class":596}," '",[519,618,441],{"class":528},[519,620,621],{"class":596},"'\n",[519,623,625],{"class":521,"line":624},2,[519,626,628],{"emptyLinePlaceholder":627},true,"\n",[519,630,632,636,639],{"class":521,"line":631},3,[519,633,635],{"class":634},"s2Zo4","initWorkersLogger",[519,637,638],{"class":600},"(",[519,640,641],{"class":596},"{\n",[519,643,645,649,652,654,657,659,661,664,667],{"class":521,"line":644},4,[519,646,648],{"class":647},"swJcz","  env",[519,650,651],{"class":596},":",[519,653,597],{"class":596},[519,655,656],{"class":647}," service",[519,658,651],{"class":596},[519,660,616],{"class":596},[519,662,663],{"class":528},"my-worker",[519,665,666],{"class":596},"'",[519,668,669],{"class":596}," },\n",[519,671,673,676],{"class":521,"line":672},5,[519,674,675],{"class":596},"}",[519,677,678],{"class":600},")\n",[519,680,682],{"class":521,"line":681},6,[519,683,628],{"emptyLinePlaceholder":627},[519,685,687,690,693,695,697,701,704,708,710,713,715,718,720,723,726,729],{"class":521,"line":686},7,[519,688,689],{"class":592},"export",[519,691,692],{"class":592}," default",[519,694,601],{"class":634},[519,696,638],{"class":600},[519,698,700],{"class":699},"spNyl","async",[519,702,703],{"class":596}," (",[519,705,707],{"class":706},"sHdIc","request",[519,709,604],{"class":596},[519,711,712],{"class":706}," _env",[519,714,604],{"class":596},[519,716,717],{"class":706}," _ctx",[519,719,604],{"class":596},[519,721,722],{"class":706}," log",[519,724,725],{"class":596},")",[519,727,728],{"class":699}," =>",[519,730,731],{"class":596}," {\n",[519,733,735,738,741,744,746,749,752,754,756,759,761,763],{"class":521,"line":734},8,[519,736,737],{"class":600},"  log",[519,739,740],{"class":596},".",[519,742,743],{"class":634},"set",[519,745,638],{"class":647},[519,747,748],{"class":596},"{",[519,750,751],{"class":647}," action",[519,753,651],{"class":596},[519,755,616],{"class":596},[519,757,758],{"class":528},"handle_request",[519,760,666],{"class":596},[519,762,610],{"class":596},[519,764,678],{"class":647},[519,766,768],{"class":521,"line":767},9,[519,769,628],{"emptyLinePlaceholder":627},[519,771,773],{"class":521,"line":772},10,[519,774,776],{"class":775},"sHwdD","  \u002F\u002F ... your handler logic\n",[519,778,780],{"class":521,"line":779},11,[519,781,628],{"emptyLinePlaceholder":627},[519,783,785,787,789,792],{"class":521,"line":784},12,[519,786,737],{"class":600},[519,788,740],{"class":596},[519,790,791],{"class":634},"emit",[519,793,794],{"class":647},"()\n",[519,796,798,801,804,806,809,811,813,816,818,822,824],{"class":521,"line":797},13,[519,799,800],{"class":592},"  return",[519,802,803],{"class":600}," Response",[519,805,740],{"class":596},[519,807,808],{"class":634},"json",[519,810,638],{"class":647},[519,812,748],{"class":596},[519,814,815],{"class":647}," ok",[519,817,651],{"class":596},[519,819,821],{"class":820},"sfNiH"," true",[519,823,610],{"class":596},[519,825,678],{"class":647},[519,827,829,831],{"class":521,"line":828},14,[519,830,675],{"class":596},[519,832,678],{"class":600},[435,834,835,837,838,841,842,845,846,851,852,855,856,859,860,863],{},[439,836,474],{}," passes ",[439,839,840],{},"ExecutionContext"," into ",[439,843,844],{},"createWorkersLogger"," for you, so async ",[472,847,848],{},[439,849,850],{},"drain"," calls (PostHog, Axiom, …) stay alive via ",[439,853,854],{},"waitUntil"," after the response is returned. Use raw ",[439,857,858],{},"export default { fetch }"," + ",[439,861,862],{},"createWorkersLogger(request, { executionCtx: ctx })"," only if you prefer not to use the wrapper.",[435,865,866,868,869,872,873,876,877,880],{},[439,867,844],{}," still auto-extracts ",[439,870,871],{},"method",", ",[439,874,875],{},"path",", and ",[439,878,879],{},"cf-ray"," from the request.",[882,883,885,886,888,889,893,894,896,897,899,900,903,904,907,908,740],"callout",{"color":884,"icon":13},"info","You must call ",[439,887,445],{}," manually before returning a response. Workers don't have a request lifecycle hook to auto-emit. With ",[472,890,891],{},[439,892,474],{},", async ",[439,895,850],{}," work is tied to ",[439,898,854],{}," automatically; with a raw ",[439,901,902],{},"{ fetch }"," handler, pass ",[439,905,906],{},"{ executionCtx: ctx }"," to ",[439,909,844],{},[497,911,51],{"id":912},"wide-events",[435,914,915],{},"Build up context progressively, then emit at the end:",[509,917,919],{"className":582,"code":918,"filename":584,"language":585,"meta":515,"style":515},"import { defineWorkerFetch, initWorkersLogger } from 'evlog\u002Fworkers'\n\ninitWorkersLogger({\n  env: { service: 'my-worker' },\n})\n\nexport default defineWorkerFetch(async (request, env, _ctx, log) => {\n  const url = new URL(request.url)\n\n  log.set({ route: url.pathname })\n\n  const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(url.searchParams.get('userId')).first()\n  log.set({ user: { id: user.id, plan: user.plan } })\n\n  const orders = await env.DB.prepare('SELECT COUNT(*) as count FROM orders WHERE user_id = ?').bind(user.id).first()\n  log.set({ orders: { count: orders.count } })\n\n  log.emit()\n  return Response.json({ user, orders })\n})\n",[439,920,921,943,947,955,975,981,985,1020,1048,1052,1080,1084,1157,1207,1211,1265,1302,1307,1318,1343],{"__ignoreMap":515},[519,922,923,925,927,929,931,933,935,937,939,941],{"class":521,"line":522},[519,924,593],{"class":592},[519,926,597],{"class":596},[519,928,601],{"class":600},[519,930,604],{"class":596},[519,932,607],{"class":600},[519,934,610],{"class":596},[519,936,613],{"class":592},[519,938,616],{"class":596},[519,940,441],{"class":528},[519,942,621],{"class":596},[519,944,945],{"class":521,"line":624},[519,946,628],{"emptyLinePlaceholder":627},[519,948,949,951,953],{"class":521,"line":631},[519,950,635],{"class":634},[519,952,638],{"class":600},[519,954,641],{"class":596},[519,956,957,959,961,963,965,967,969,971,973],{"class":521,"line":644},[519,958,648],{"class":647},[519,960,651],{"class":596},[519,962,597],{"class":596},[519,964,656],{"class":647},[519,966,651],{"class":596},[519,968,616],{"class":596},[519,970,663],{"class":528},[519,972,666],{"class":596},[519,974,669],{"class":596},[519,976,977,979],{"class":521,"line":672},[519,978,675],{"class":596},[519,980,678],{"class":600},[519,982,983],{"class":521,"line":681},[519,984,628],{"emptyLinePlaceholder":627},[519,986,987,989,991,993,995,997,999,1001,1003,1006,1008,1010,1012,1014,1016,1018],{"class":521,"line":686},[519,988,689],{"class":592},[519,990,692],{"class":592},[519,992,601],{"class":634},[519,994,638],{"class":600},[519,996,700],{"class":699},[519,998,703],{"class":596},[519,1000,707],{"class":706},[519,1002,604],{"class":596},[519,1004,1005],{"class":706}," env",[519,1007,604],{"class":596},[519,1009,717],{"class":706},[519,1011,604],{"class":596},[519,1013,722],{"class":706},[519,1015,725],{"class":596},[519,1017,728],{"class":699},[519,1019,731],{"class":596},[519,1021,1022,1025,1028,1031,1034,1037,1039,1041,1043,1046],{"class":521,"line":734},[519,1023,1024],{"class":699},"  const",[519,1026,1027],{"class":600}," url",[519,1029,1030],{"class":596}," =",[519,1032,1033],{"class":596}," new",[519,1035,1036],{"class":634}," URL",[519,1038,638],{"class":647},[519,1040,707],{"class":600},[519,1042,740],{"class":596},[519,1044,1045],{"class":600},"url",[519,1047,678],{"class":647},[519,1049,1050],{"class":521,"line":767},[519,1051,628],{"emptyLinePlaceholder":627},[519,1053,1054,1056,1058,1060,1062,1064,1067,1069,1071,1073,1076,1078],{"class":521,"line":772},[519,1055,737],{"class":600},[519,1057,740],{"class":596},[519,1059,743],{"class":634},[519,1061,638],{"class":647},[519,1063,748],{"class":596},[519,1065,1066],{"class":647}," route",[519,1068,651],{"class":596},[519,1070,1027],{"class":600},[519,1072,740],{"class":596},[519,1074,1075],{"class":600},"pathname",[519,1077,610],{"class":596},[519,1079,678],{"class":647},[519,1081,1082],{"class":521,"line":779},[519,1083,628],{"emptyLinePlaceholder":627},[519,1085,1086,1088,1091,1093,1096,1098,1100,1103,1105,1108,1110,1112,1115,1117,1119,1121,1124,1126,1128,1130,1133,1135,1138,1140,1142,1145,1147,1150,1152,1155],{"class":521,"line":784},[519,1087,1024],{"class":699},[519,1089,1090],{"class":600}," user",[519,1092,1030],{"class":596},[519,1094,1095],{"class":592}," await",[519,1097,1005],{"class":600},[519,1099,740],{"class":596},[519,1101,1102],{"class":600},"DB",[519,1104,740],{"class":596},[519,1106,1107],{"class":634},"prepare",[519,1109,638],{"class":647},[519,1111,666],{"class":596},[519,1113,1114],{"class":528},"SELECT * FROM users WHERE id = ?",[519,1116,666],{"class":596},[519,1118,725],{"class":647},[519,1120,740],{"class":596},[519,1122,1123],{"class":634},"bind",[519,1125,638],{"class":647},[519,1127,1045],{"class":600},[519,1129,740],{"class":596},[519,1131,1132],{"class":600},"searchParams",[519,1134,740],{"class":596},[519,1136,1137],{"class":634},"get",[519,1139,638],{"class":647},[519,1141,666],{"class":596},[519,1143,1144],{"class":528},"userId",[519,1146,666],{"class":596},[519,1148,1149],{"class":647},"))",[519,1151,740],{"class":596},[519,1153,1154],{"class":634},"first",[519,1156,794],{"class":647},[519,1158,1159,1161,1163,1165,1167,1169,1171,1173,1175,1178,1180,1182,1184,1187,1189,1192,1194,1196,1198,1201,1203,1205],{"class":521,"line":797},[519,1160,737],{"class":600},[519,1162,740],{"class":596},[519,1164,743],{"class":634},[519,1166,638],{"class":647},[519,1168,748],{"class":596},[519,1170,1090],{"class":647},[519,1172,651],{"class":596},[519,1174,597],{"class":596},[519,1176,1177],{"class":647}," id",[519,1179,651],{"class":596},[519,1181,1090],{"class":600},[519,1183,740],{"class":596},[519,1185,1186],{"class":600},"id",[519,1188,604],{"class":596},[519,1190,1191],{"class":647}," plan",[519,1193,651],{"class":596},[519,1195,1090],{"class":600},[519,1197,740],{"class":596},[519,1199,1200],{"class":600},"plan",[519,1202,610],{"class":596},[519,1204,610],{"class":596},[519,1206,678],{"class":647},[519,1208,1209],{"class":521,"line":828},[519,1210,628],{"emptyLinePlaceholder":627},[519,1212,1214,1216,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1240,1242,1244,1246,1248,1250,1253,1255,1257,1259,1261,1263],{"class":521,"line":1213},15,[519,1215,1024],{"class":699},[519,1217,1218],{"class":600}," orders",[519,1220,1030],{"class":596},[519,1222,1095],{"class":592},[519,1224,1005],{"class":600},[519,1226,740],{"class":596},[519,1228,1102],{"class":600},[519,1230,740],{"class":596},[519,1232,1107],{"class":634},[519,1234,638],{"class":647},[519,1236,666],{"class":596},[519,1238,1239],{"class":528},"SELECT COUNT(*) as count FROM orders WHERE user_id = ?",[519,1241,666],{"class":596},[519,1243,725],{"class":647},[519,1245,740],{"class":596},[519,1247,1123],{"class":634},[519,1249,638],{"class":647},[519,1251,1252],{"class":600},"user",[519,1254,740],{"class":596},[519,1256,1186],{"class":600},[519,1258,725],{"class":647},[519,1260,740],{"class":596},[519,1262,1154],{"class":634},[519,1264,794],{"class":647},[519,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1287,1289,1291,1293,1296,1298,1300],{"class":521,"line":1267},16,[519,1269,737],{"class":600},[519,1271,740],{"class":596},[519,1273,743],{"class":634},[519,1275,638],{"class":647},[519,1277,748],{"class":596},[519,1279,1218],{"class":647},[519,1281,651],{"class":596},[519,1283,597],{"class":596},[519,1285,1286],{"class":647}," count",[519,1288,651],{"class":596},[519,1290,1218],{"class":600},[519,1292,740],{"class":596},[519,1294,1295],{"class":600},"count",[519,1297,610],{"class":596},[519,1299,610],{"class":596},[519,1301,678],{"class":647},[519,1303,1305],{"class":521,"line":1304},17,[519,1306,628],{"emptyLinePlaceholder":627},[519,1308,1310,1312,1314,1316],{"class":521,"line":1309},18,[519,1311,737],{"class":600},[519,1313,740],{"class":596},[519,1315,791],{"class":634},[519,1317,794],{"class":647},[519,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341],{"class":521,"line":1320},19,[519,1322,800],{"class":592},[519,1324,803],{"class":600},[519,1326,740],{"class":596},[519,1328,808],{"class":634},[519,1330,638],{"class":647},[519,1332,748],{"class":596},[519,1334,1090],{"class":600},[519,1336,604],{"class":596},[519,1338,1218],{"class":600},[519,1340,610],{"class":596},[519,1342,678],{"class":647},[519,1344,1346,1348],{"class":521,"line":1345},20,[519,1347,675],{"class":596},[519,1349,678],{"class":600},[509,1351,1354],{"className":511,"code":1352,"filename":1353,"language":514,"meta":515,"style":515},"14:58:15 INFO [my-worker] GET \u002Fapi\u002Fusers 200 in 12ms\n  ├─ orders: count=5\n  ├─ user: id=usr_123 plan=pro\n  ├─ route: \u002Fapi\u002Fusers\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[439,1355,1356,1367,1382,1395,1405],{"__ignoreMap":515},[519,1357,1358,1361,1364],{"class":521,"line":522},[519,1359,1360],{"class":525},"14:58:15",[519,1362,1363],{"class":528}," INFO",[519,1365,1366],{"class":600}," [my-worker] GET \u002Fapi\u002Fusers 200 in 12ms\n",[519,1368,1369,1372,1375,1378],{"class":521,"line":624},[519,1370,1371],{"class":525},"  ├─",[519,1373,1374],{"class":528}," orders:",[519,1376,1377],{"class":528}," count=",[519,1379,1381],{"class":1380},"sbssI","5\n",[519,1383,1384,1386,1389,1392],{"class":521,"line":631},[519,1385,1371],{"class":525},[519,1387,1388],{"class":528}," user:",[519,1390,1391],{"class":528}," id=usr_123",[519,1393,1394],{"class":528}," plan=pro\n",[519,1396,1397,1399,1402],{"class":521,"line":644},[519,1398,1371],{"class":525},[519,1400,1401],{"class":528}," route:",[519,1403,1404],{"class":528}," \u002Fapi\u002Fusers\n",[519,1406,1407,1410,1413],{"class":521,"line":672},[519,1408,1409],{"class":525},"  └─",[519,1411,1412],{"class":528}," requestId:",[519,1414,1415],{"class":528}," 4a8ff3a8-...\n",[497,1417,1419],{"id":1418},"error-handling","Error Handling",[435,1421,1422,1423,1426],{},"Use ",[439,1424,1425],{},"createError"," for structured errors and handle them with try\u002Fcatch:",[509,1428,1430],{"className":582,"code":1429,"filename":584,"language":585,"meta":515,"style":515},"import { createError, parseError } from 'evlog'\nimport { defineWorkerFetch, initWorkersLogger } from 'evlog\u002Fworkers'\n\ninitWorkersLogger({ env: { service: 'my-worker' } })\n\nexport default defineWorkerFetch(async (request, env, _ctx, log) => {\n  try {\n    const body = await request.json()\n    log.set({ payment: { amount: body.amount } })\n\n    if (body.amount \u003C= 0) {\n      throw createError({\n        status: 400,\n        message: 'Invalid payment amount',\n        why: 'The amount must be a positive number',\n        fix: 'Pass a positive integer in cents',\n      })\n    }\n\n    log.emit()\n    return Response.json({ success: true })\n  } catch (error) {\n    log.error(error instanceof Error ? error : new Error(String(error)))\n    log.emit()\n\n    const parsed = parseError(error)\n    return Response.json({\n      message: parsed.message,\n      why: parsed.why,\n      fix: parsed.fix,\n    }, { status: parsed.status })\n  }\n})\n",[439,1431,1432,1457,1479,1483,1513,1517,1551,1558,1579,1617,1621,1646,1657,1670,1686,1702,1718,1725,1730,1734,1744,1771,1789,1833,1844,1849,1867,1882,1899,1916,1933,1957,1963],{"__ignoreMap":515},[519,1433,1434,1436,1438,1441,1443,1446,1448,1450,1452,1455],{"class":521,"line":522},[519,1435,593],{"class":592},[519,1437,597],{"class":596},[519,1439,1440],{"class":600}," createError",[519,1442,604],{"class":596},[519,1444,1445],{"class":600}," parseError",[519,1447,610],{"class":596},[519,1449,613],{"class":592},[519,1451,616],{"class":596},[519,1453,1454],{"class":528},"evlog",[519,1456,621],{"class":596},[519,1458,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477],{"class":521,"line":624},[519,1460,593],{"class":592},[519,1462,597],{"class":596},[519,1464,601],{"class":600},[519,1466,604],{"class":596},[519,1468,607],{"class":600},[519,1470,610],{"class":596},[519,1472,613],{"class":592},[519,1474,616],{"class":596},[519,1476,441],{"class":528},[519,1478,621],{"class":596},[519,1480,1481],{"class":521,"line":631},[519,1482,628],{"emptyLinePlaceholder":627},[519,1484,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511],{"class":521,"line":644},[519,1486,635],{"class":634},[519,1488,638],{"class":600},[519,1490,748],{"class":596},[519,1492,1005],{"class":647},[519,1494,651],{"class":596},[519,1496,597],{"class":596},[519,1498,656],{"class":647},[519,1500,651],{"class":596},[519,1502,616],{"class":596},[519,1504,663],{"class":528},[519,1506,666],{"class":596},[519,1508,610],{"class":596},[519,1510,610],{"class":596},[519,1512,678],{"class":600},[519,1514,1515],{"class":521,"line":672},[519,1516,628],{"emptyLinePlaceholder":627},[519,1518,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549],{"class":521,"line":681},[519,1520,689],{"class":592},[519,1522,692],{"class":592},[519,1524,601],{"class":634},[519,1526,638],{"class":600},[519,1528,700],{"class":699},[519,1530,703],{"class":596},[519,1532,707],{"class":706},[519,1534,604],{"class":596},[519,1536,1005],{"class":706},[519,1538,604],{"class":596},[519,1540,717],{"class":706},[519,1542,604],{"class":596},[519,1544,722],{"class":706},[519,1546,725],{"class":596},[519,1548,728],{"class":699},[519,1550,731],{"class":596},[519,1552,1553,1556],{"class":521,"line":686},[519,1554,1555],{"class":592},"  try",[519,1557,731],{"class":596},[519,1559,1560,1563,1566,1568,1570,1573,1575,1577],{"class":521,"line":734},[519,1561,1562],{"class":699},"    const",[519,1564,1565],{"class":600}," body",[519,1567,1030],{"class":596},[519,1569,1095],{"class":592},[519,1571,1572],{"class":600}," request",[519,1574,740],{"class":596},[519,1576,808],{"class":634},[519,1578,794],{"class":647},[519,1580,1581,1584,1586,1588,1590,1592,1595,1597,1599,1602,1604,1606,1608,1611,1613,1615],{"class":521,"line":767},[519,1582,1583],{"class":600},"    log",[519,1585,740],{"class":596},[519,1587,743],{"class":634},[519,1589,638],{"class":647},[519,1591,748],{"class":596},[519,1593,1594],{"class":647}," payment",[519,1596,651],{"class":596},[519,1598,597],{"class":596},[519,1600,1601],{"class":647}," amount",[519,1603,651],{"class":596},[519,1605,1565],{"class":600},[519,1607,740],{"class":596},[519,1609,1610],{"class":600},"amount",[519,1612,610],{"class":596},[519,1614,610],{"class":596},[519,1616,678],{"class":647},[519,1618,1619],{"class":521,"line":772},[519,1620,628],{"emptyLinePlaceholder":627},[519,1622,1623,1626,1628,1631,1633,1635,1638,1641,1644],{"class":521,"line":779},[519,1624,1625],{"class":592},"    if",[519,1627,703],{"class":647},[519,1629,1630],{"class":600},"body",[519,1632,740],{"class":596},[519,1634,1610],{"class":600},[519,1636,1637],{"class":596}," \u003C=",[519,1639,1640],{"class":1380}," 0",[519,1642,1643],{"class":647},") ",[519,1645,641],{"class":596},[519,1647,1648,1651,1653,1655],{"class":521,"line":784},[519,1649,1650],{"class":592},"      throw",[519,1652,1440],{"class":634},[519,1654,638],{"class":647},[519,1656,641],{"class":596},[519,1658,1659,1662,1664,1667],{"class":521,"line":797},[519,1660,1661],{"class":647},"        status",[519,1663,651],{"class":596},[519,1665,1666],{"class":1380}," 400",[519,1668,1669],{"class":596},",\n",[519,1671,1672,1675,1677,1679,1682,1684],{"class":521,"line":828},[519,1673,1674],{"class":647},"        message",[519,1676,651],{"class":596},[519,1678,616],{"class":596},[519,1680,1681],{"class":528},"Invalid payment amount",[519,1683,666],{"class":596},[519,1685,1669],{"class":596},[519,1687,1688,1691,1693,1695,1698,1700],{"class":521,"line":1213},[519,1689,1690],{"class":647},"        why",[519,1692,651],{"class":596},[519,1694,616],{"class":596},[519,1696,1697],{"class":528},"The amount must be a positive number",[519,1699,666],{"class":596},[519,1701,1669],{"class":596},[519,1703,1704,1707,1709,1711,1714,1716],{"class":521,"line":1267},[519,1705,1706],{"class":647},"        fix",[519,1708,651],{"class":596},[519,1710,616],{"class":596},[519,1712,1713],{"class":528},"Pass a positive integer in cents",[519,1715,666],{"class":596},[519,1717,1669],{"class":596},[519,1719,1720,1723],{"class":521,"line":1304},[519,1721,1722],{"class":596},"      }",[519,1724,678],{"class":647},[519,1726,1727],{"class":521,"line":1309},[519,1728,1729],{"class":596},"    }\n",[519,1731,1732],{"class":521,"line":1320},[519,1733,628],{"emptyLinePlaceholder":627},[519,1735,1736,1738,1740,1742],{"class":521,"line":1345},[519,1737,1583],{"class":600},[519,1739,740],{"class":596},[519,1741,791],{"class":634},[519,1743,794],{"class":647},[519,1745,1747,1750,1752,1754,1756,1758,1760,1763,1765,1767,1769],{"class":521,"line":1746},21,[519,1748,1749],{"class":592},"    return",[519,1751,803],{"class":600},[519,1753,740],{"class":596},[519,1755,808],{"class":634},[519,1757,638],{"class":647},[519,1759,748],{"class":596},[519,1761,1762],{"class":647}," success",[519,1764,651],{"class":596},[519,1766,821],{"class":820},[519,1768,610],{"class":596},[519,1770,678],{"class":647},[519,1772,1774,1777,1780,1782,1785,1787],{"class":521,"line":1773},22,[519,1775,1776],{"class":596},"  }",[519,1778,1779],{"class":592}," catch",[519,1781,703],{"class":647},[519,1783,1784],{"class":600},"error",[519,1786,1643],{"class":647},[519,1788,641],{"class":596},[519,1790,1792,1794,1796,1798,1800,1802,1805,1808,1811,1814,1817,1819,1821,1823,1826,1828,1830],{"class":521,"line":1791},23,[519,1793,1583],{"class":600},[519,1795,740],{"class":596},[519,1797,1784],{"class":634},[519,1799,638],{"class":647},[519,1801,1784],{"class":600},[519,1803,1804],{"class":596}," instanceof",[519,1806,1807],{"class":525}," Error",[519,1809,1810],{"class":596}," ?",[519,1812,1813],{"class":600}," error",[519,1815,1816],{"class":596}," :",[519,1818,1033],{"class":596},[519,1820,1807],{"class":634},[519,1822,638],{"class":647},[519,1824,1825],{"class":634},"String",[519,1827,638],{"class":647},[519,1829,1784],{"class":600},[519,1831,1832],{"class":647},")))\n",[519,1834,1836,1838,1840,1842],{"class":521,"line":1835},24,[519,1837,1583],{"class":600},[519,1839,740],{"class":596},[519,1841,791],{"class":634},[519,1843,794],{"class":647},[519,1845,1847],{"class":521,"line":1846},25,[519,1848,628],{"emptyLinePlaceholder":627},[519,1850,1852,1854,1857,1859,1861,1863,1865],{"class":521,"line":1851},26,[519,1853,1562],{"class":699},[519,1855,1856],{"class":600}," parsed",[519,1858,1030],{"class":596},[519,1860,1445],{"class":634},[519,1862,638],{"class":647},[519,1864,1784],{"class":600},[519,1866,678],{"class":647},[519,1868,1870,1872,1874,1876,1878,1880],{"class":521,"line":1869},27,[519,1871,1749],{"class":592},[519,1873,803],{"class":600},[519,1875,740],{"class":596},[519,1877,808],{"class":634},[519,1879,638],{"class":647},[519,1881,641],{"class":596},[519,1883,1885,1888,1890,1892,1894,1897],{"class":521,"line":1884},28,[519,1886,1887],{"class":647},"      message",[519,1889,651],{"class":596},[519,1891,1856],{"class":600},[519,1893,740],{"class":596},[519,1895,1896],{"class":600},"message",[519,1898,1669],{"class":596},[519,1900,1902,1905,1907,1909,1911,1914],{"class":521,"line":1901},29,[519,1903,1904],{"class":647},"      why",[519,1906,651],{"class":596},[519,1908,1856],{"class":600},[519,1910,740],{"class":596},[519,1912,1913],{"class":600},"why",[519,1915,1669],{"class":596},[519,1917,1919,1922,1924,1926,1928,1931],{"class":521,"line":1918},30,[519,1920,1921],{"class":647},"      fix",[519,1923,651],{"class":596},[519,1925,1856],{"class":600},[519,1927,740],{"class":596},[519,1929,1930],{"class":600},"fix",[519,1932,1669],{"class":596},[519,1934,1936,1939,1941,1944,1946,1948,1950,1953,1955],{"class":521,"line":1935},31,[519,1937,1938],{"class":596},"    },",[519,1940,597],{"class":596},[519,1942,1943],{"class":647}," status",[519,1945,651],{"class":596},[519,1947,1856],{"class":600},[519,1949,740],{"class":596},[519,1951,1952],{"class":600},"status",[519,1954,610],{"class":596},[519,1956,678],{"class":647},[519,1958,1960],{"class":521,"line":1959},32,[519,1961,1962],{"class":596},"  }\n",[519,1964,1966,1968],{"class":521,"line":1965},33,[519,1967,675],{"class":596},[519,1969,678],{"class":600},[497,1971,170],{"id":1972},"configuration",[435,1974,1975,1976,1979,1980,1983],{},"See the ",[486,1977,1978],{"href":171},"Configuration reference"," for all available options (",[439,1981,1982],{},"initLogger",", middleware options, sampling, silent mode, etc.).",[497,1985,1987],{"id":1986},"drain-enrichers","Drain & Enrichers",[435,1989,1990,1991,1993],{},"Configure drain and enrichers via ",[439,1992,635],{}," options:",[509,1995,1997],{"className":582,"code":1996,"filename":584,"language":585,"meta":515,"style":515},"import { initWorkersLogger, createWorkersLogger } from 'evlog\u002Fworkers'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n})\nconst drain = pipeline(createAxiomDrain())\nconst userAgent = createUserAgentEnricher()\n\ninitWorkersLogger({\n  env: { service: 'my-worker' },\n  drain,\n  enrich: (ctx) => {\n    userAgent(ctx)\n  },\n})\n",[439,1998,1999,2022,2042,2062,2082,2104,2108,2134,2163,2169,2189,2202,2206,2214,2234,2241,2259,2270,2275],{"__ignoreMap":515},[519,2000,2001,2003,2005,2007,2009,2012,2014,2016,2018,2020],{"class":521,"line":522},[519,2002,593],{"class":592},[519,2004,597],{"class":596},[519,2006,607],{"class":600},[519,2008,604],{"class":596},[519,2010,2011],{"class":600}," createWorkersLogger",[519,2013,610],{"class":596},[519,2015,613],{"class":592},[519,2017,616],{"class":596},[519,2019,441],{"class":528},[519,2021,621],{"class":596},[519,2023,2024,2026,2028,2031,2033,2035,2037,2040],{"class":521,"line":624},[519,2025,593],{"class":592},[519,2027,597],{"class":596},[519,2029,2030],{"class":600}," createAxiomDrain",[519,2032,610],{"class":596},[519,2034,613],{"class":592},[519,2036,616],{"class":596},[519,2038,2039],{"class":528},"evlog\u002Faxiom",[519,2041,621],{"class":596},[519,2043,2044,2046,2048,2051,2053,2055,2057,2060],{"class":521,"line":631},[519,2045,593],{"class":592},[519,2047,597],{"class":596},[519,2049,2050],{"class":600}," createUserAgentEnricher",[519,2052,610],{"class":596},[519,2054,613],{"class":592},[519,2056,616],{"class":596},[519,2058,2059],{"class":528},"evlog\u002Fenrichers",[519,2061,621],{"class":596},[519,2063,2064,2066,2068,2071,2073,2075,2077,2080],{"class":521,"line":644},[519,2065,593],{"class":592},[519,2067,597],{"class":596},[519,2069,2070],{"class":600}," createDrainPipeline",[519,2072,610],{"class":596},[519,2074,613],{"class":592},[519,2076,616],{"class":596},[519,2078,2079],{"class":528},"evlog\u002Fpipeline",[519,2081,621],{"class":596},[519,2083,2084,2086,2089,2091,2094,2096,2098,2100,2102],{"class":521,"line":672},[519,2085,593],{"class":592},[519,2087,2088],{"class":592}," type",[519,2090,597],{"class":596},[519,2092,2093],{"class":600}," DrainContext",[519,2095,610],{"class":596},[519,2097,613],{"class":592},[519,2099,616],{"class":596},[519,2101,1454],{"class":528},[519,2103,621],{"class":596},[519,2105,2106],{"class":521,"line":681},[519,2107,628],{"emptyLinePlaceholder":627},[519,2109,2110,2113,2116,2119,2121,2124,2127,2130,2132],{"class":521,"line":686},[519,2111,2112],{"class":699},"const",[519,2114,2115],{"class":600}," pipeline ",[519,2117,2118],{"class":596},"=",[519,2120,2070],{"class":634},[519,2122,2123],{"class":596},"\u003C",[519,2125,2126],{"class":525},"DrainContext",[519,2128,2129],{"class":596},">",[519,2131,638],{"class":600},[519,2133,641],{"class":596},[519,2135,2136,2139,2141,2143,2146,2148,2151,2153,2156,2158,2161],{"class":521,"line":734},[519,2137,2138],{"class":647},"  batch",[519,2140,651],{"class":596},[519,2142,597],{"class":596},[519,2144,2145],{"class":647}," size",[519,2147,651],{"class":596},[519,2149,2150],{"class":1380}," 50",[519,2152,604],{"class":596},[519,2154,2155],{"class":647}," intervalMs",[519,2157,651],{"class":596},[519,2159,2160],{"class":1380}," 5000",[519,2162,669],{"class":596},[519,2164,2165,2167],{"class":521,"line":767},[519,2166,675],{"class":596},[519,2168,678],{"class":600},[519,2170,2171,2173,2176,2178,2181,2183,2186],{"class":521,"line":772},[519,2172,2112],{"class":699},[519,2174,2175],{"class":600}," drain ",[519,2177,2118],{"class":596},[519,2179,2180],{"class":634}," pipeline",[519,2182,638],{"class":600},[519,2184,2185],{"class":634},"createAxiomDrain",[519,2187,2188],{"class":600},"())\n",[519,2190,2191,2193,2196,2198,2200],{"class":521,"line":779},[519,2192,2112],{"class":699},[519,2194,2195],{"class":600}," userAgent ",[519,2197,2118],{"class":596},[519,2199,2050],{"class":634},[519,2201,794],{"class":600},[519,2203,2204],{"class":521,"line":784},[519,2205,628],{"emptyLinePlaceholder":627},[519,2207,2208,2210,2212],{"class":521,"line":797},[519,2209,635],{"class":634},[519,2211,638],{"class":600},[519,2213,641],{"class":596},[519,2215,2216,2218,2220,2222,2224,2226,2228,2230,2232],{"class":521,"line":828},[519,2217,648],{"class":647},[519,2219,651],{"class":596},[519,2221,597],{"class":596},[519,2223,656],{"class":647},[519,2225,651],{"class":596},[519,2227,616],{"class":596},[519,2229,663],{"class":528},[519,2231,666],{"class":596},[519,2233,669],{"class":596},[519,2235,2236,2239],{"class":521,"line":1213},[519,2237,2238],{"class":600},"  drain",[519,2240,1669],{"class":596},[519,2242,2243,2246,2248,2250,2253,2255,2257],{"class":521,"line":1267},[519,2244,2245],{"class":634},"  enrich",[519,2247,651],{"class":596},[519,2249,703],{"class":596},[519,2251,2252],{"class":706},"ctx",[519,2254,725],{"class":596},[519,2256,728],{"class":699},[519,2258,731],{"class":596},[519,2260,2261,2264,2266,2268],{"class":521,"line":1304},[519,2262,2263],{"class":634},"    userAgent",[519,2265,638],{"class":647},[519,2267,2252],{"class":600},[519,2269,678],{"class":647},[519,2271,2272],{"class":521,"line":1309},[519,2273,2274],{"class":596},"  },\n",[519,2276,2277,2279],{"class":521,"line":1320},[519,2278,675],{"class":596},[519,2280,678],{"class":600},[882,2282,1975,2283,2285,2286,2288],{"color":884,"icon":13},[486,2284,327],{"href":332}," and ",[486,2287,414],{"href":419}," docs for all available drain adapters and enrichers.",[497,2290,2292],{"id":2291},"wrangler-configuration","Wrangler Configuration",[435,2294,2295],{},"Disable Cloudflare's default invocation logs to avoid duplicates when using evlog:",[509,2297,2302],{"className":2298,"code":2299,"filename":2300,"language":2301,"meta":515,"style":515},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability]\nenabled = false\n","wrangler.toml","toml",[439,2303,2304,2315],{"__ignoreMap":515},[519,2305,2306,2309,2312],{"class":521,"line":522},[519,2307,2308],{"class":596},"[",[519,2310,2311],{"class":525},"observability",[519,2313,2314],{"class":596},"]\n",[519,2316,2317,2320,2322],{"class":521,"line":624},[519,2318,2319],{"class":600},"enabled ",[519,2321,2118],{"class":596},[519,2323,2324],{"class":820}," false\n",[497,2326,2328],{"id":2327},"run-locally","Run Locally",[509,2330,2333],{"className":511,"code":2331,"filename":2332,"language":514,"meta":515,"style":515},"wrangler dev\n","Terminal",[439,2334,2335],{"__ignoreMap":515},[519,2336,2337,2340],{"class":521,"line":522},[519,2338,2339],{"class":525},"wrangler",[519,2341,2342],{"class":528}," dev\n",[497,2344,2346],{"id":2345},"next-steps","Next Steps",[456,2348,2349,2354,2359,2364],{},[459,2350,2351,2353],{},[486,2352,51],{"href":52},": Design comprehensive events with context layering",[459,2355,2356,2358],{},[486,2357,327],{"href":332},": Send logs to Axiom, Sentry, PostHog, and more",[459,2360,2361,2363],{},[486,2362,175],{"href":176},": Control log volume with head and tail sampling",[459,2365,2366,2368,2369,872,2371,876,2373,2376],{},[486,2367,56],{"href":57},": Throw errors with ",[439,2370,1913],{},[439,2372,1930],{},[439,2374,2375],{},"link"," fields",[2378,2379,2380],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":515,"searchDepth":624,"depth":624,"links":2382},[2383,2387,2388,2389,2390,2391,2392,2393],{"id":499,"depth":624,"text":20,"children":2384},[2385,2386],{"id":503,"depth":631,"text":504},{"id":578,"depth":631,"text":579},{"id":912,"depth":624,"text":51},{"id":1418,"depth":624,"text":1419},{"id":1972,"depth":624,"text":170},{"id":1986,"depth":624,"text":1987},{"id":2291,"depth":624,"text":2292},{"id":2327,"depth":624,"text":2328},{"id":2345,"depth":624,"text":2346},"Wide events, structured errors, and logging in Cloudflare Workers and Durable Objects.","md",null,{},{"title":266,"icon":269},{"title":266,"description":2394},"ZXs1yKjKKzQ80CGPR6TwDh4NwsfkH3rPw22EB1gcgm8",[2402,2404],{"title":261,"path":262,"stem":263,"description":2403,"icon":264,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in React Router applications.",{"title":271,"path":272,"stem":273,"description":2405,"icon":183,"children":-1},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.",1778336619996]