[{"data":1,"prerenderedAt":6094},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nextjs":454,"-frameworks-nextjs-surround":6089},[4,35,159,201,289,352,438],{"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,316,321,326,330,334,338,342,347],{"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},"In-process stream","\u002Fbuild-on-top\u002Fin-process-stream","5.build-on-top\u002F1.in-process-stream","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Fanout","\u002Fbuild-on-top\u002Ffanout-and-multi-drain","5.build-on-top\u002F10.fanout-and-multi-drain","i-lucide-share-2",{"title":308,"path":309,"stem":310,"icon":311},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F11.identity-headers","i-lucide-fingerprint",{"title":313,"path":314,"stem":315,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fcustom-framework","5.build-on-top\u002F12.custom-framework",{"title":317,"path":318,"stem":319,"icon":320},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":322,"path":323,"stem":324,"icon":325},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":156,"path":327,"stem":328,"icon":329},"\u002Fbuild-on-top\u002Fconsumer-recipes","5.build-on-top\u002F4.consumer-recipes","i-lucide-chef-hat",{"title":331,"path":332,"stem":333,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fplugins","5.build-on-top\u002F5.plugins",{"title":335,"path":336,"stem":337,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fcustom-enrichers","5.build-on-top\u002F6.custom-enrichers",{"title":339,"path":340,"stem":341,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Ftail-sampling","5.build-on-top\u002F7.tail-sampling",{"title":343,"path":344,"stem":345,"icon":346},"Custom drains","\u002Fbuild-on-top\u002Fcustom-drains","5.build-on-top\u002F8.custom-drains","i-lucide-code-2",{"title":348,"path":349,"stem":350,"icon":351},"Drain pipeline","\u002Fbuild-on-top\u002Fdrain-pipeline","5.build-on-top\u002F9.drain-pipeline","i-lucide-workflow",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Adapters","\u002Fadapters","6.adapters",[357,360,400,415],{"title":41,"path":358,"stem":359,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":361,"path":362,"stem":363,"children":364,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[365,370,375,380,385,390,395],{"title":366,"path":367,"stem":368,"icon":369},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":371,"path":372,"stem":373,"icon":374},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":376,"path":377,"stem":378,"icon":379},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":381,"path":382,"stem":383,"icon":384},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":386,"path":387,"stem":388,"icon":389},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":391,"path":392,"stem":393,"icon":394},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":396,"path":397,"stem":398,"icon":399},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[405,410],{"title":406,"path":407,"stem":408,"icon":409},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":411,"path":412,"stem":413,"icon":414},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":416,"path":417,"stem":418,"children":419,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[420,424,429,433],{"title":421,"path":422,"stem":423,"icon":351},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":425,"path":426,"stem":427,"icon":428},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":430,"path":431,"stem":432,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":434,"path":435,"stem":436,"icon":437},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":439,"path":440,"stem":441,"children":442,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[443,446,450],{"title":41,"path":444,"stem":445,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":447,"path":448,"stem":449,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":451,"path":452,"stem":453,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":455,"title":216,"body":456,"description":6079,"extension":6080,"links":6081,"meta":6085,"navigation":6086,"path":217,"seo":6087,"stem":218,"__hash__":6088},"docs\u002F4.frameworks\u002F02.nextjs.md",{"type":457,"value":458,"toc":6050},"minimark",[459,476,523,527,532,603,607,726,730,878,882,897,943,947,1070,1074,1087,1104,1173,1186,1535,1545,1549,1583,1866,1881,1884,1921,1943,1946,1975,2020,2024,2030,2843,2846,2849,3226,3229,3309,3316,3335,3510,3514,3532,3998,4007,4132,4135,4202,4206,4219,4519,4532,4535,4551,4556,4758,4762,4765,4990,4995,4998,5011,5097,5110,5114,5119,5266,5270,5277,5465,5468,5474,5715,5719,5725,5856,5859,5943,5947,5989,5997,6007,6011,6017,6046],[460,461,462,463,467,468,471,472,475],"p",{},"evlog integrates with Next.js App Router via a ",[464,465,466],"code",{},"createEvlog()"," factory that provides ",[464,469,470],{},"withEvlog()"," handler wrapper, ",[464,473,474],{},"useLogger()",", and typed exports. One file, zero global state.",[477,478,481,484,509],"prompt",{":actions":479,"description":480,"icon":219},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Next.js app",[460,482,483],{},"Set up evlog in my Next.js app with wide events and structured errors.",[485,486,487,491,494,497,500,503,506],"ul",{},[488,489,490],"li",{},"Install evlog: pnpm add evlog",[488,492,493],{},"Create lib\u002Fevlog.ts with createEvlog() to export withEvlog, useLogger, createError",[488,495,496],{},"Set service name and optional sampling\u002Fdrain config",[488,498,499],{},"Wrap API route handlers with withEvlog()",[488,501,502],{},"Use useLogger() inside handlers to build wide events with log.set()",[488,504,505],{},"Throw errors with createError({ message, status, why, fix })",[488,507,508],{},"Wide events are auto-emitted when each request completes",[460,510,511,512,518,519],{},"Docs: ",[513,514,515],"a",{"href":515,"rel":516},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fnextjs",[517],"nofollow","\nAdapters: ",[513,520,521],{"href":521,"rel":522},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[517],[524,525,20],"h2",{"id":526},"quick-start",[528,529,531],"h3",{"id":530},"_1-install","1. Install",[533,534,535,560,574,588],"code-group",{},[536,537,543],"pre",{"className":538,"code":539,"filename":540,"language":541,"meta":542,"style":542},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[464,544,545],{"__ignoreMap":542},[546,547,550,553,557],"span",{"class":548,"line":549},"line",1,[546,551,540],{"class":552},"sBMFI",[546,554,556],{"class":555},"sfazB"," add",[546,558,559],{"class":555}," evlog\n",[536,561,564],{"className":538,"code":562,"filename":563,"language":541,"meta":542,"style":542},"bun add evlog\n","bun",[464,565,566],{"__ignoreMap":542},[546,567,568,570,572],{"class":548,"line":549},[546,569,563],{"class":552},[546,571,556],{"class":555},[546,573,559],{"class":555},[536,575,578],{"className":538,"code":576,"filename":577,"language":541,"meta":542,"style":542},"yarn add evlog\n","yarn",[464,579,580],{"__ignoreMap":542},[546,581,582,584,586],{"class":548,"line":549},[546,583,577],{"class":552},[546,585,556],{"class":555},[546,587,559],{"class":555},[536,589,592],{"className":538,"code":590,"filename":591,"language":541,"meta":542,"style":542},"npm install evlog\n","npm",[464,593,594],{"__ignoreMap":542},[546,595,596,598,601],{"class":548,"line":549},[546,597,591],{"class":552},[546,599,600],{"class":555}," install",[546,602,559],{"class":555},[528,604,606],{"id":605},"_2-create-your-evlog-instance","2. Create your evlog instance",[536,608,613],{"className":609,"code":610,"filename":611,"language":612,"meta":542,"style":542},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib\u002Fevlog.ts","typescript",[464,614,615,644,651,697,718],{"__ignoreMap":542},[546,616,617,621,625,629,632,635,638,641],{"class":548,"line":549},[546,618,620],{"class":619},"s7zQu","import",[546,622,624],{"class":623},"sMK4o"," {",[546,626,628],{"class":627},"sTEyZ"," createEvlog",[546,630,631],{"class":623}," }",[546,633,634],{"class":619}," from",[546,636,637],{"class":623}," '",[546,639,640],{"class":555},"evlog\u002Fnext",[546,642,643],{"class":623},"'\n",[546,645,647],{"class":548,"line":646},2,[546,648,650],{"emptyLinePlaceholder":649},true,"\n",[546,652,654,657,661,663,666,669,672,674,677,679,682,685,688,691,694],{"class":548,"line":653},3,[546,655,656],{"class":619},"export",[546,658,660],{"class":659},"spNyl"," const",[546,662,624],{"class":623},[546,664,665],{"class":627}," withEvlog",[546,667,668],{"class":623},",",[546,670,671],{"class":627}," useLogger",[546,673,668],{"class":623},[546,675,676],{"class":627}," log",[546,678,668],{"class":623},[546,680,681],{"class":627}," createError ",[546,683,684],{"class":623},"}",[546,686,687],{"class":623}," =",[546,689,628],{"class":690},"s2Zo4",[546,692,693],{"class":627},"(",[546,695,696],{"class":623},"{\n",[546,698,700,704,707,709,712,715],{"class":548,"line":699},4,[546,701,703],{"class":702},"swJcz","  service",[546,705,706],{"class":623},":",[546,708,637],{"class":623},[546,710,711],{"class":555},"my-app",[546,713,714],{"class":623},"'",[546,716,717],{"class":623},",\n",[546,719,721,723],{"class":548,"line":720},5,[546,722,684],{"class":623},[546,724,725],{"class":627},")\n",[528,727,729],{"id":728},"_3-wrap-a-route-handler","3. Wrap a route handler",[536,731,734],{"className":609,"code":732,"filename":733,"language":612,"meta":542,"style":542},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const GET = withEvlog(async () => {\n  const log = useLogger()\n  log.set({ action: 'hello' })\n  return Response.json({ message: 'Hello!' })\n})\n","app\u002Fapi\u002Fhello\u002Froute.ts",[464,735,736,759,763,791,805,837,871],{"__ignoreMap":542},[546,737,738,740,742,744,746,748,750,752,754,757],{"class":548,"line":549},[546,739,620],{"class":619},[546,741,624],{"class":623},[546,743,665],{"class":627},[546,745,668],{"class":623},[546,747,671],{"class":627},[546,749,631],{"class":623},[546,751,634],{"class":619},[546,753,637],{"class":623},[546,755,756],{"class":555},"@\u002Flib\u002Fevlog",[546,758,643],{"class":623},[546,760,761],{"class":548,"line":646},[546,762,650],{"emptyLinePlaceholder":649},[546,764,765,767,769,772,775,777,779,782,785,788],{"class":548,"line":653},[546,766,656],{"class":619},[546,768,660],{"class":659},[546,770,771],{"class":627}," GET ",[546,773,774],{"class":623},"=",[546,776,665],{"class":690},[546,778,693],{"class":627},[546,780,781],{"class":659},"async",[546,783,784],{"class":623}," ()",[546,786,787],{"class":659}," =>",[546,789,790],{"class":623}," {\n",[546,792,793,796,798,800,802],{"class":548,"line":699},[546,794,795],{"class":659},"  const",[546,797,676],{"class":627},[546,799,687],{"class":623},[546,801,671],{"class":690},[546,803,804],{"class":702},"()\n",[546,806,807,810,813,816,818,821,824,826,828,831,833,835],{"class":548,"line":720},[546,808,809],{"class":627},"  log",[546,811,812],{"class":623},".",[546,814,815],{"class":690},"set",[546,817,693],{"class":702},[546,819,820],{"class":623},"{",[546,822,823],{"class":702}," action",[546,825,706],{"class":623},[546,827,637],{"class":623},[546,829,830],{"class":555},"hello",[546,832,714],{"class":623},[546,834,631],{"class":623},[546,836,725],{"class":702},[546,838,840,843,846,848,851,853,855,858,860,862,865,867,869],{"class":548,"line":839},6,[546,841,842],{"class":619},"  return",[546,844,845],{"class":627}," Response",[546,847,812],{"class":623},[546,849,850],{"class":690},"json",[546,852,693],{"class":702},[546,854,820],{"class":623},[546,856,857],{"class":702}," message",[546,859,706],{"class":623},[546,861,637],{"class":623},[546,863,864],{"class":555},"Hello!",[546,866,714],{"class":623},[546,868,631],{"class":623},[546,870,725],{"class":702},[546,872,874,876],{"class":548,"line":873},7,[546,875,684],{"class":623},[546,877,725],{"class":627},[524,879,881],{"id":880},"instrumentation","Instrumentation",[460,883,884,885,892,893,896],{},"Next.js supports an ",[513,886,889],{"href":887,"rel":888},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fguides\u002Finstrumentation",[517],[464,890,891],{},"instrumentation.ts"," file at the project root for server startup hooks and error reporting. evlog provides ",[464,894,895],{},"createInstrumentation()"," to integrate with this pattern.",[898,899,901,904],"callout",{"color":900,"icon":13},"info",[460,902,903],{},"These two APIs serve different purposes and can be used independently or together:",[485,905,906,916,931],{},[488,907,908,913,914],{},[909,910,911],"strong",{},[464,912,466],{},": per-request wide events via ",[464,915,470],{},[488,917,918,922,923,926,927,930],{},[909,919,920],{},[464,921,895],{},": server startup (",[464,924,925],{},"register()",") + unhandled error reporting (",[464,928,929],{},"onRequestError()",") across all routes, including SSR and RSC",[488,932,933,934,936,937,939,940,812],{},"Both can coexist: ",[464,935,925],{}," initializes and locks the logger first, so ",[464,938,466],{}," respects it. Each can have its own ",[464,941,942],{},"drain",[528,944,946],{"id":945},"_1-add-instrumentation-exports-to-your-evlog-instance","1. Add instrumentation exports to your evlog instance",[536,948,950],{"className":609,"code":949,"filename":611,"language":612,"meta":542,"style":542},"import { createInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\nimport { createFsDrain } from 'evlog\u002Ffs'\n\nexport const { register, onRequestError } = createInstrumentation({\n  service: 'my-app',\n  drain: createFsDrain(),\n  captureOutput: true,\n})\n",[464,951,952,972,992,996,1022,1036,1050,1063],{"__ignoreMap":542},[546,953,954,956,958,961,963,965,967,970],{"class":548,"line":549},[546,955,620],{"class":619},[546,957,624],{"class":623},[546,959,960],{"class":627}," createInstrumentation",[546,962,631],{"class":623},[546,964,634],{"class":619},[546,966,637],{"class":623},[546,968,969],{"class":555},"evlog\u002Fnext\u002Finstrumentation",[546,971,643],{"class":623},[546,973,974,976,978,981,983,985,987,990],{"class":548,"line":646},[546,975,620],{"class":619},[546,977,624],{"class":623},[546,979,980],{"class":627}," createFsDrain",[546,982,631],{"class":623},[546,984,634],{"class":619},[546,986,637],{"class":623},[546,988,989],{"class":555},"evlog\u002Ffs",[546,991,643],{"class":623},[546,993,994],{"class":548,"line":653},[546,995,650],{"emptyLinePlaceholder":649},[546,997,998,1000,1002,1004,1007,1009,1012,1014,1016,1018,1020],{"class":548,"line":699},[546,999,656],{"class":619},[546,1001,660],{"class":659},[546,1003,624],{"class":623},[546,1005,1006],{"class":627}," register",[546,1008,668],{"class":623},[546,1010,1011],{"class":627}," onRequestError ",[546,1013,684],{"class":623},[546,1015,687],{"class":623},[546,1017,960],{"class":690},[546,1019,693],{"class":627},[546,1021,696],{"class":623},[546,1023,1024,1026,1028,1030,1032,1034],{"class":548,"line":720},[546,1025,703],{"class":702},[546,1027,706],{"class":623},[546,1029,637],{"class":623},[546,1031,711],{"class":555},[546,1033,714],{"class":623},[546,1035,717],{"class":623},[546,1037,1038,1041,1043,1045,1048],{"class":548,"line":839},[546,1039,1040],{"class":702},"  drain",[546,1042,706],{"class":623},[546,1044,980],{"class":690},[546,1046,1047],{"class":627},"()",[546,1049,717],{"class":623},[546,1051,1052,1055,1057,1061],{"class":548,"line":873},[546,1053,1054],{"class":702},"  captureOutput",[546,1056,706],{"class":623},[546,1058,1060],{"class":1059},"sfNiH"," true",[546,1062,717],{"class":623},[546,1064,1066,1068],{"class":548,"line":1065},8,[546,1067,684],{"class":623},[546,1069,725],{"class":627},[528,1071,1073],{"id":1072},"_2-wire-up-instrumentationts","2. Wire up instrumentation.ts",[460,1075,1076,1077,1079,1080,1082,1083,1086],{},"Next.js evaluates ",[464,1078,891],{}," in both Node.js and Edge runtimes. Load your real ",[464,1081,611],{}," only when ",[464,1084,1085],{},"NEXT_RUNTIME === 'nodejs'"," so Edge bundles never pull Node-only drains (fs, adapters, etc.).",[460,1088,1089,1092,1093,1096,1097,1100,1101,706],{},[909,1090,1091],{},"Recommended",": ",[464,1094,1095],{},"defineNodeInstrumentation"," gates the Node runtime, dynamic-imports your module once (cached), and forwards ",[464,1098,1099],{},"register"," \u002F ",[464,1102,1103],{},"onRequestError",[536,1105,1107],{"className":609,"code":1106,"filename":891,"language":612,"meta":542,"style":542},"import { defineNodeInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nexport const { register, onRequestError } = defineNodeInstrumentation(() => import('.\u002Flib\u002Fevlog'))\n",[464,1108,1109,1128,1132],{"__ignoreMap":542},[546,1110,1111,1113,1115,1118,1120,1122,1124,1126],{"class":548,"line":549},[546,1112,620],{"class":619},[546,1114,624],{"class":623},[546,1116,1117],{"class":627}," defineNodeInstrumentation",[546,1119,631],{"class":623},[546,1121,634],{"class":619},[546,1123,637],{"class":623},[546,1125,969],{"class":555},[546,1127,643],{"class":623},[546,1129,1130],{"class":548,"line":646},[546,1131,650],{"emptyLinePlaceholder":649},[546,1133,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1161,1163,1165,1168,1170],{"class":548,"line":653},[546,1135,656],{"class":619},[546,1137,660],{"class":659},[546,1139,624],{"class":623},[546,1141,1006],{"class":627},[546,1143,668],{"class":623},[546,1145,1011],{"class":627},[546,1147,684],{"class":623},[546,1149,687],{"class":623},[546,1151,1117],{"class":690},[546,1153,693],{"class":627},[546,1155,1047],{"class":623},[546,1157,787],{"class":659},[546,1159,1160],{"class":623}," import",[546,1162,693],{"class":627},[546,1164,714],{"class":623},[546,1166,1167],{"class":555},".\u002Flib\u002Fevlog",[546,1169,714],{"class":623},[546,1171,1172],{"class":627},"))\n",[460,1174,1175,1178,1179,1181,1182,1185],{},[909,1176,1177],{},"Manual",": same behavior with explicit handlers; use this if you want full control in the root file (extra branches, per-error logic, or a different import strategy). Without a shared helper, each ",[464,1180,1103],{}," typically re-runs ",[464,1183,1184],{},"import('.\u002Flib\u002Fevlog')"," unless you add your own cache.",[536,1187,1189],{"className":609,"code":1188,"filename":891,"language":612,"meta":542,"style":542},"export async function register() {\n  if (process.env.NEXT_RUNTIME === 'nodejs') {\n    const { register } = await import('.\u002Flib\u002Fevlog')\n    await register()\n  }\n}\n\nexport async function onRequestError(\n  error: { digest?: string } & Error,\n  request: { path: string; method: string; headers: Record\u003Cstring, string> },\n  context: { routerKind: string; routePath: string; routeType: string; renderSource: string },\n) {\n  if (process.env.NEXT_RUNTIME === 'nodejs') {\n    const { onRequestError } = await import('.\u002Flib\u002Fevlog')\n    await onRequestError(error, request, context)\n  }\n}\n",[464,1190,1191,1207,1243,1271,1280,1285,1290,1294,1308,1338,1391,1437,1445,1474,1501,1525,1530],{"__ignoreMap":542},[546,1192,1193,1195,1198,1201,1203,1205],{"class":548,"line":549},[546,1194,656],{"class":619},[546,1196,1197],{"class":659}," async",[546,1199,1200],{"class":659}," function",[546,1202,1006],{"class":690},[546,1204,1047],{"class":623},[546,1206,790],{"class":623},[546,1208,1209,1212,1215,1218,1220,1223,1225,1228,1231,1233,1236,1238,1241],{"class":548,"line":646},[546,1210,1211],{"class":619},"  if",[546,1213,1214],{"class":702}," (",[546,1216,1217],{"class":627},"process",[546,1219,812],{"class":623},[546,1221,1222],{"class":627},"env",[546,1224,812],{"class":623},[546,1226,1227],{"class":627},"NEXT_RUNTIME",[546,1229,1230],{"class":623}," ===",[546,1232,637],{"class":623},[546,1234,1235],{"class":555},"nodejs",[546,1237,714],{"class":623},[546,1239,1240],{"class":702},") ",[546,1242,696],{"class":623},[546,1244,1245,1248,1250,1252,1254,1256,1259,1261,1263,1265,1267,1269],{"class":548,"line":653},[546,1246,1247],{"class":659},"    const",[546,1249,624],{"class":623},[546,1251,1006],{"class":627},[546,1253,631],{"class":623},[546,1255,687],{"class":623},[546,1257,1258],{"class":619}," await",[546,1260,1160],{"class":623},[546,1262,693],{"class":702},[546,1264,714],{"class":623},[546,1266,1167],{"class":555},[546,1268,714],{"class":623},[546,1270,725],{"class":702},[546,1272,1273,1276,1278],{"class":548,"line":699},[546,1274,1275],{"class":619},"    await",[546,1277,1006],{"class":690},[546,1279,804],{"class":702},[546,1281,1282],{"class":548,"line":720},[546,1283,1284],{"class":623},"  }\n",[546,1286,1287],{"class":548,"line":839},[546,1288,1289],{"class":623},"}\n",[546,1291,1292],{"class":548,"line":873},[546,1293,650],{"emptyLinePlaceholder":649},[546,1295,1296,1298,1300,1302,1305],{"class":548,"line":1065},[546,1297,656],{"class":619},[546,1299,1197],{"class":659},[546,1301,1200],{"class":659},[546,1303,1304],{"class":690}," onRequestError",[546,1306,1307],{"class":623},"(\n",[546,1309,1311,1315,1317,1319,1322,1325,1328,1330,1333,1336],{"class":548,"line":1310},9,[546,1312,1314],{"class":1313},"sHdIc","  error",[546,1316,706],{"class":623},[546,1318,624],{"class":623},[546,1320,1321],{"class":702}," digest",[546,1323,1324],{"class":623},"?:",[546,1326,1327],{"class":552}," string",[546,1329,631],{"class":623},[546,1331,1332],{"class":623}," &",[546,1334,1335],{"class":552}," Error",[546,1337,717],{"class":623},[546,1339,1341,1344,1346,1348,1351,1353,1355,1358,1361,1363,1365,1367,1370,1372,1375,1378,1381,1383,1385,1388],{"class":548,"line":1340},10,[546,1342,1343],{"class":1313},"  request",[546,1345,706],{"class":623},[546,1347,624],{"class":623},[546,1349,1350],{"class":702}," path",[546,1352,706],{"class":623},[546,1354,1327],{"class":552},[546,1356,1357],{"class":623},";",[546,1359,1360],{"class":702}," method",[546,1362,706],{"class":623},[546,1364,1327],{"class":552},[546,1366,1357],{"class":623},[546,1368,1369],{"class":702}," headers",[546,1371,706],{"class":623},[546,1373,1374],{"class":552}," Record",[546,1376,1377],{"class":623},"\u003C",[546,1379,1380],{"class":552},"string",[546,1382,668],{"class":623},[546,1384,1327],{"class":552},[546,1386,1387],{"class":623},">",[546,1389,1390],{"class":623}," },\n",[546,1392,1394,1397,1399,1401,1404,1406,1408,1410,1413,1415,1417,1419,1422,1424,1426,1428,1431,1433,1435],{"class":548,"line":1393},11,[546,1395,1396],{"class":1313},"  context",[546,1398,706],{"class":623},[546,1400,624],{"class":623},[546,1402,1403],{"class":702}," routerKind",[546,1405,706],{"class":623},[546,1407,1327],{"class":552},[546,1409,1357],{"class":623},[546,1411,1412],{"class":702}," routePath",[546,1414,706],{"class":623},[546,1416,1327],{"class":552},[546,1418,1357],{"class":623},[546,1420,1421],{"class":702}," routeType",[546,1423,706],{"class":623},[546,1425,1327],{"class":552},[546,1427,1357],{"class":623},[546,1429,1430],{"class":702}," renderSource",[546,1432,706],{"class":623},[546,1434,1327],{"class":552},[546,1436,1390],{"class":623},[546,1438,1440,1443],{"class":548,"line":1439},12,[546,1441,1442],{"class":623},")",[546,1444,790],{"class":623},[546,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472],{"class":548,"line":1447},13,[546,1449,1211],{"class":619},[546,1451,1214],{"class":702},[546,1453,1217],{"class":627},[546,1455,812],{"class":623},[546,1457,1222],{"class":627},[546,1459,812],{"class":623},[546,1461,1227],{"class":627},[546,1463,1230],{"class":623},[546,1465,637],{"class":623},[546,1467,1235],{"class":555},[546,1469,714],{"class":623},[546,1471,1240],{"class":702},[546,1473,696],{"class":623},[546,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499],{"class":548,"line":1476},14,[546,1478,1247],{"class":659},[546,1480,624],{"class":623},[546,1482,1304],{"class":627},[546,1484,631],{"class":623},[546,1486,687],{"class":623},[546,1488,1258],{"class":619},[546,1490,1160],{"class":623},[546,1492,693],{"class":702},[546,1494,714],{"class":623},[546,1496,1167],{"class":555},[546,1498,714],{"class":623},[546,1500,725],{"class":702},[546,1502,1504,1506,1508,1510,1513,1515,1518,1520,1523],{"class":548,"line":1503},15,[546,1505,1275],{"class":619},[546,1507,1304],{"class":690},[546,1509,693],{"class":702},[546,1511,1512],{"class":627},"error",[546,1514,668],{"class":623},[546,1516,1517],{"class":627}," request",[546,1519,668],{"class":623},[546,1521,1522],{"class":627}," context",[546,1524,725],{"class":702},[546,1526,1528],{"class":548,"line":1527},16,[546,1529,1284],{"class":623},[546,1531,1533],{"class":548,"line":1532},17,[546,1534,1289],{"class":623},[460,1536,1537,1538,1540,1541,1544],{},"Both styles are supported: the helper is optional sugar, not a takeover. ",[464,1539,1095],{}," only forwards Next’s two hooks to whatever you export from ",[464,1542,1543],{},"lib\u002Fevlog",". It does not prevent other work in your app.",[528,1546,1548],{"id":1547},"custom-behavior-evlog-your-code","Custom behavior (evlog + your code)",[485,1550,1551,1575],{},[488,1552,1553,1558,1559,1561,1562,1564,1565,1568,1569,1572,1573,812],{},[909,1554,1555,1556],{},"Root ",[464,1557,891],{},": Next’s stable surface here is ",[464,1560,1099],{}," and ",[464,1563,1103],{},". The evlog helper exports exactly those; it does not reserve the whole file. If you need ",[909,1566,1567],{},"additional"," top-level exports later (when Next documents them), use the ",[909,1570,1571],{},"manual"," wiring and compose by hand, or keep evlog’s hooks minimal and put everything else in ",[464,1574,611],{},[488,1576,1577,1582],{},[909,1578,1579,1581],{},[464,1580,611],{}," (recommended for composition)",": wrap evlog’s handlers so you stay free to add startup work, metrics, or extra logging without fighting the helper:",[536,1584,1586],{"className":609,"code":1585,"filename":611,"language":612,"meta":542,"style":542},"import { createInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nconst { register: evlogRegister, onRequestError: evlogOnRequestError } = createInstrumentation({\n  service: 'my-app',\n  drain: myDrain,\n})\n\nexport async function register() {\n  await evlogRegister()\n  \u002F\u002F e.g. OpenTelemetry, feature flags, custom one-off init\n}\n\nexport function onRequestError(\n  error: { digest?: string } & Error,\n  request: { path: string; method: string; headers: Record\u003Cstring, string> },\n  context: { routerKind: string; routePath: string; routeType: string; renderSource: string },\n) {\n  evlogOnRequestError(error, request, context)\n  \u002F\u002F optional: your own side effects (metrics, etc.)\n}\n",[464,1587,1588,1606,1610,1643,1657,1668,1674,1678,1692,1701,1707,1711,1715,1725,1747,1789,1829,1835,1855,1861],{"__ignoreMap":542},[546,1589,1590,1592,1594,1596,1598,1600,1602,1604],{"class":548,"line":549},[546,1591,620],{"class":619},[546,1593,624],{"class":623},[546,1595,960],{"class":627},[546,1597,631],{"class":623},[546,1599,634],{"class":619},[546,1601,637],{"class":623},[546,1603,969],{"class":555},[546,1605,643],{"class":623},[546,1607,1608],{"class":548,"line":646},[546,1609,650],{"emptyLinePlaceholder":649},[546,1611,1612,1615,1617,1619,1621,1624,1626,1628,1630,1633,1635,1637,1639,1641],{"class":548,"line":653},[546,1613,1614],{"class":659},"const",[546,1616,624],{"class":623},[546,1618,1006],{"class":702},[546,1620,706],{"class":623},[546,1622,1623],{"class":627}," evlogRegister",[546,1625,668],{"class":623},[546,1627,1304],{"class":702},[546,1629,706],{"class":623},[546,1631,1632],{"class":627}," evlogOnRequestError ",[546,1634,684],{"class":623},[546,1636,687],{"class":623},[546,1638,960],{"class":690},[546,1640,693],{"class":627},[546,1642,696],{"class":623},[546,1644,1645,1647,1649,1651,1653,1655],{"class":548,"line":699},[546,1646,703],{"class":702},[546,1648,706],{"class":623},[546,1650,637],{"class":623},[546,1652,711],{"class":555},[546,1654,714],{"class":623},[546,1656,717],{"class":623},[546,1658,1659,1661,1663,1666],{"class":548,"line":720},[546,1660,1040],{"class":702},[546,1662,706],{"class":623},[546,1664,1665],{"class":627}," myDrain",[546,1667,717],{"class":623},[546,1669,1670,1672],{"class":548,"line":839},[546,1671,684],{"class":623},[546,1673,725],{"class":627},[546,1675,1676],{"class":548,"line":873},[546,1677,650],{"emptyLinePlaceholder":649},[546,1679,1680,1682,1684,1686,1688,1690],{"class":548,"line":1065},[546,1681,656],{"class":619},[546,1683,1197],{"class":659},[546,1685,1200],{"class":659},[546,1687,1006],{"class":690},[546,1689,1047],{"class":623},[546,1691,790],{"class":623},[546,1693,1694,1697,1699],{"class":548,"line":1310},[546,1695,1696],{"class":619},"  await",[546,1698,1623],{"class":690},[546,1700,804],{"class":702},[546,1702,1703],{"class":548,"line":1340},[546,1704,1706],{"class":1705},"sHwdD","  \u002F\u002F e.g. OpenTelemetry, feature flags, custom one-off init\n",[546,1708,1709],{"class":548,"line":1393},[546,1710,1289],{"class":623},[546,1712,1713],{"class":548,"line":1439},[546,1714,650],{"emptyLinePlaceholder":649},[546,1716,1717,1719,1721,1723],{"class":548,"line":1447},[546,1718,656],{"class":619},[546,1720,1200],{"class":659},[546,1722,1304],{"class":690},[546,1724,1307],{"class":623},[546,1726,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745],{"class":548,"line":1476},[546,1728,1314],{"class":1313},[546,1730,706],{"class":623},[546,1732,624],{"class":623},[546,1734,1321],{"class":702},[546,1736,1324],{"class":623},[546,1738,1327],{"class":552},[546,1740,631],{"class":623},[546,1742,1332],{"class":623},[546,1744,1335],{"class":552},[546,1746,717],{"class":623},[546,1748,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787],{"class":548,"line":1503},[546,1750,1343],{"class":1313},[546,1752,706],{"class":623},[546,1754,624],{"class":623},[546,1756,1350],{"class":702},[546,1758,706],{"class":623},[546,1760,1327],{"class":552},[546,1762,1357],{"class":623},[546,1764,1360],{"class":702},[546,1766,706],{"class":623},[546,1768,1327],{"class":552},[546,1770,1357],{"class":623},[546,1772,1369],{"class":702},[546,1774,706],{"class":623},[546,1776,1374],{"class":552},[546,1778,1377],{"class":623},[546,1780,1380],{"class":552},[546,1782,668],{"class":623},[546,1784,1327],{"class":552},[546,1786,1387],{"class":623},[546,1788,1390],{"class":623},[546,1790,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827],{"class":548,"line":1527},[546,1792,1396],{"class":1313},[546,1794,706],{"class":623},[546,1796,624],{"class":623},[546,1798,1403],{"class":702},[546,1800,706],{"class":623},[546,1802,1327],{"class":552},[546,1804,1357],{"class":623},[546,1806,1412],{"class":702},[546,1808,706],{"class":623},[546,1810,1327],{"class":552},[546,1812,1357],{"class":623},[546,1814,1421],{"class":702},[546,1816,706],{"class":623},[546,1818,1327],{"class":552},[546,1820,1357],{"class":623},[546,1822,1430],{"class":702},[546,1824,706],{"class":623},[546,1826,1327],{"class":552},[546,1828,1390],{"class":623},[546,1830,1831,1833],{"class":548,"line":1532},[546,1832,1442],{"class":623},[546,1834,790],{"class":623},[546,1836,1838,1841,1843,1845,1847,1849,1851,1853],{"class":548,"line":1837},18,[546,1839,1840],{"class":690},"  evlogOnRequestError",[546,1842,693],{"class":702},[546,1844,1512],{"class":627},[546,1846,668],{"class":623},[546,1848,1517],{"class":627},[546,1850,668],{"class":623},[546,1852,1522],{"class":627},[546,1854,725],{"class":702},[546,1856,1858],{"class":548,"line":1857},19,[546,1859,1860],{"class":1705},"  \u002F\u002F optional: your own side effects (metrics, etc.)\n",[546,1862,1864],{"class":548,"line":1863},20,[546,1865,1289],{"class":623},[460,1867,1868,1869,1871,1872,1874,1875,1877,1878,1880],{},"Then keep ",[464,1870,891],{}," as a thin import (",[464,1873,1095],{}," or manual) that only loads ",[464,1876,1167],{}," on Node. Your customization lives next to ",[464,1879,466],{}," in one place.",[460,1882,1883],{},"Next.js automatically calls these exports:",[485,1885,1886,1902],{},[488,1887,1888,1890,1891,1894,1895,1561,1898,1901],{},[464,1889,925],{},": Runs once when the server starts. Initializes the evlog logger with your configured drain, sampling, and options. When ",[464,1892,1893],{},"captureOutput"," is enabled, ",[464,1896,1897],{},"stdout",[464,1899,1900],{},"stderr"," writes are captured as structured log events.",[488,1903,1904,1906,1907,1910,1911,1910,1914,1910,1917,1920],{},[464,1905,929],{},": Called on every unhandled request error. Emits a structured error log with the error message, digest, stack trace, request path\u002Fmethod, and routing context (",[464,1908,1909],{},"routerKind",", ",[464,1912,1913],{},"routePath",[464,1915,1916],{},"routeType",[464,1918,1919],{},"renderSource",").",[898,1922,1923,1925,1926,1928,1929,1561,1932,1935,1936,1100,1939,1942],{"color":900,"icon":13},[464,1924,1893],{}," only activates in the Node.js runtime (",[464,1927,1085],{},"). It patches ",[464,1930,1931],{},"process.stdout.write",[464,1933,1934],{},"process.stderr.write"," to emit structured ",[464,1937,1938],{},"log.info",[464,1940,1941],{},"log.error"," events alongside the original output.",[528,1944,170],{"id":1945},"configuration",[460,1947,1948,1949,1951,1952,1910,1955,1910,1958,1910,1960,1910,1963,1910,1966,1910,1969,1910,1972,1974],{},"The ",[464,1950,895],{}," factory accepts global logger options (",[464,1953,1954],{},"enabled",[464,1956,1957],{},"service",[464,1959,1222],{},[464,1961,1962],{},"pretty",[464,1964,1965],{},"silent",[464,1967,1968],{},"sampling",[464,1970,1971],{},"stringify",[464,1973,942],{},") plus:",[1976,1977,1978,1997],"table",{},[1979,1980,1981],"thead",{},[1982,1983,1984,1988,1991,1994],"tr",{},[1985,1986,1987],"th",{},"Option",[1985,1989,1990],{},"Type",[1985,1992,1993],{},"Default",[1985,1995,1996],{},"Description",[1998,1999,2000],"tbody",{},[1982,2001,2002,2007,2012,2017],{},[2003,2004,2005],"td",{},[464,2006,1893],{},[2003,2008,2009],{},[464,2010,2011],{},"boolean",[2003,2013,2014],{},[464,2015,2016],{},"false",[2003,2018,2019],{},"Capture stdout\u002Fstderr as structured log events",[524,2021,2023],{"id":2022},"production-configuration","Production Configuration",[460,2025,2026,2027,2029],{},"A real-world ",[464,2028,611],{}," with enrichers, batched drain, tail sampling, and route-based service names:",[536,2031,2033],{"className":609,"code":2032,"filename":611,"language":612,"meta":542,"style":542},"import type { DrainContext } from 'evlog'\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createUserAgentEnricher, createRequestSizeEnricher } from 'evlog\u002Fenrichers'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\n\u002F\u002F 1. Enrichers - add derived context to every event\nconst enrichers = [createUserAgentEnricher(), createRequestSizeEnricher()]\n\n\u002F\u002F 2. Pipeline - batch events before sending\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 50, intervalMs: 5000 } })\n\n\u002F\u002F 3. Drain - send batched events to Axiom\nconst drain = pipeline(createAxiomDrain({\n  dataset: 'logs',\n  token: process.env.AXIOM_TOKEN!,\n}))\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n\n  \u002F\u002F 4. Head sampling - keep 10% of info logs\n  sampling: {\n    rates: { info: 10 },\n    keep: [\n      { status: 400 },              \u002F\u002F Always keep errors\n      { duration: 1000 },           \u002F\u002F Always keep slow requests\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F Always keep critical paths\n    ],\n  },\n\n  \u002F\u002F 5. Route-based service names\n  routes: {\n    '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n    '\u002Fapi\u002Fbooking\u002F**': { service: 'booking-service' },\n  },\n\n  \u002F\u002F 6. Custom tail sampling - business logic\n  keep: (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  },\n\n  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n  enrich: (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n    ctx.event.deploymentId = process.env.VERCEL_DEPLOYMENT_ID\n    ctx.event.region = process.env.VERCEL_REGION\n  },\n\n  drain,\n})\n",[464,2034,2035,2058,2076,2101,2121,2141,2145,2150,2174,2178,2183,2237,2241,2246,2267,2283,2305,2311,2315,2347,2361,2366,2372,2382,2402,2413,2433,2451,2472,2480,2486,2491,2497,2507,2536,2563,2590,2595,2600,2606,2625,2669,2699,2704,2709,2715,2733,2763,2792,2819,2824,2829,2836],{"__ignoreMap":542},[546,2036,2037,2039,2042,2044,2047,2049,2051,2053,2056],{"class":548,"line":549},[546,2038,620],{"class":619},[546,2040,2041],{"class":619}," type",[546,2043,624],{"class":623},[546,2045,2046],{"class":627}," DrainContext",[546,2048,631],{"class":623},[546,2050,634],{"class":619},[546,2052,637],{"class":623},[546,2054,2055],{"class":555},"evlog",[546,2057,643],{"class":623},[546,2059,2060,2062,2064,2066,2068,2070,2072,2074],{"class":548,"line":646},[546,2061,620],{"class":619},[546,2063,624],{"class":623},[546,2065,628],{"class":627},[546,2067,631],{"class":623},[546,2069,634],{"class":619},[546,2071,637],{"class":623},[546,2073,640],{"class":555},[546,2075,643],{"class":623},[546,2077,2078,2080,2082,2085,2087,2090,2092,2094,2096,2099],{"class":548,"line":653},[546,2079,620],{"class":619},[546,2081,624],{"class":623},[546,2083,2084],{"class":627}," createUserAgentEnricher",[546,2086,668],{"class":623},[546,2088,2089],{"class":627}," createRequestSizeEnricher",[546,2091,631],{"class":623},[546,2093,634],{"class":619},[546,2095,637],{"class":623},[546,2097,2098],{"class":555},"evlog\u002Fenrichers",[546,2100,643],{"class":623},[546,2102,2103,2105,2107,2110,2112,2114,2116,2119],{"class":548,"line":699},[546,2104,620],{"class":619},[546,2106,624],{"class":623},[546,2108,2109],{"class":627}," createAxiomDrain",[546,2111,631],{"class":623},[546,2113,634],{"class":619},[546,2115,637],{"class":623},[546,2117,2118],{"class":555},"evlog\u002Faxiom",[546,2120,643],{"class":623},[546,2122,2123,2125,2127,2130,2132,2134,2136,2139],{"class":548,"line":720},[546,2124,620],{"class":619},[546,2126,624],{"class":623},[546,2128,2129],{"class":627}," createDrainPipeline",[546,2131,631],{"class":623},[546,2133,634],{"class":619},[546,2135,637],{"class":623},[546,2137,2138],{"class":555},"evlog\u002Fpipeline",[546,2140,643],{"class":623},[546,2142,2143],{"class":548,"line":839},[546,2144,650],{"emptyLinePlaceholder":649},[546,2146,2147],{"class":548,"line":873},[546,2148,2149],{"class":1705},"\u002F\u002F 1. Enrichers - add derived context to every event\n",[546,2151,2152,2154,2157,2159,2162,2165,2167,2169,2171],{"class":548,"line":1065},[546,2153,1614],{"class":659},[546,2155,2156],{"class":627}," enrichers ",[546,2158,774],{"class":623},[546,2160,2161],{"class":627}," [",[546,2163,2164],{"class":690},"createUserAgentEnricher",[546,2166,1047],{"class":627},[546,2168,668],{"class":623},[546,2170,2089],{"class":690},[546,2172,2173],{"class":627},"()]\n",[546,2175,2176],{"class":548,"line":1310},[546,2177,650],{"emptyLinePlaceholder":649},[546,2179,2180],{"class":548,"line":1340},[546,2181,2182],{"class":1705},"\u002F\u002F 2. Pipeline - batch events before sending\n",[546,2184,2185,2187,2190,2192,2194,2196,2199,2201,2203,2205,2208,2210,2212,2215,2217,2221,2223,2226,2228,2231,2233,2235],{"class":548,"line":1393},[546,2186,1614],{"class":659},[546,2188,2189],{"class":627}," pipeline ",[546,2191,774],{"class":623},[546,2193,2129],{"class":690},[546,2195,1377],{"class":623},[546,2197,2198],{"class":552},"DrainContext",[546,2200,1387],{"class":623},[546,2202,693],{"class":627},[546,2204,820],{"class":623},[546,2206,2207],{"class":702}," batch",[546,2209,706],{"class":623},[546,2211,624],{"class":623},[546,2213,2214],{"class":702}," size",[546,2216,706],{"class":623},[546,2218,2220],{"class":2219},"sbssI"," 50",[546,2222,668],{"class":623},[546,2224,2225],{"class":702}," intervalMs",[546,2227,706],{"class":623},[546,2229,2230],{"class":2219}," 5000",[546,2232,631],{"class":623},[546,2234,631],{"class":623},[546,2236,725],{"class":627},[546,2238,2239],{"class":548,"line":1439},[546,2240,650],{"emptyLinePlaceholder":649},[546,2242,2243],{"class":548,"line":1447},[546,2244,2245],{"class":1705},"\u002F\u002F 3. Drain - send batched events to Axiom\n",[546,2247,2248,2250,2253,2255,2258,2260,2263,2265],{"class":548,"line":1476},[546,2249,1614],{"class":659},[546,2251,2252],{"class":627}," drain ",[546,2254,774],{"class":623},[546,2256,2257],{"class":690}," pipeline",[546,2259,693],{"class":627},[546,2261,2262],{"class":690},"createAxiomDrain",[546,2264,693],{"class":627},[546,2266,696],{"class":623},[546,2268,2269,2272,2274,2276,2279,2281],{"class":548,"line":1503},[546,2270,2271],{"class":702},"  dataset",[546,2273,706],{"class":623},[546,2275,637],{"class":623},[546,2277,2278],{"class":555},"logs",[546,2280,714],{"class":623},[546,2282,717],{"class":623},[546,2284,2285,2288,2290,2293,2295,2297,2299,2302],{"class":548,"line":1527},[546,2286,2287],{"class":702},"  token",[546,2289,706],{"class":623},[546,2291,2292],{"class":627}," process",[546,2294,812],{"class":623},[546,2296,1222],{"class":627},[546,2298,812],{"class":623},[546,2300,2301],{"class":627},"AXIOM_TOKEN",[546,2303,2304],{"class":623},"!,\n",[546,2306,2307,2309],{"class":548,"line":1532},[546,2308,684],{"class":623},[546,2310,1172],{"class":627},[546,2312,2313],{"class":548,"line":1837},[546,2314,650],{"emptyLinePlaceholder":649},[546,2316,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345],{"class":548,"line":1857},[546,2318,656],{"class":619},[546,2320,660],{"class":659},[546,2322,624],{"class":623},[546,2324,665],{"class":627},[546,2326,668],{"class":623},[546,2328,671],{"class":627},[546,2330,668],{"class":623},[546,2332,676],{"class":627},[546,2334,668],{"class":623},[546,2336,681],{"class":627},[546,2338,684],{"class":623},[546,2340,687],{"class":623},[546,2342,628],{"class":690},[546,2344,693],{"class":627},[546,2346,696],{"class":623},[546,2348,2349,2351,2353,2355,2357,2359],{"class":548,"line":1863},[546,2350,703],{"class":702},[546,2352,706],{"class":623},[546,2354,637],{"class":623},[546,2356,711],{"class":555},[546,2358,714],{"class":623},[546,2360,717],{"class":623},[546,2362,2364],{"class":548,"line":2363},21,[546,2365,650],{"emptyLinePlaceholder":649},[546,2367,2369],{"class":548,"line":2368},22,[546,2370,2371],{"class":1705},"  \u002F\u002F 4. Head sampling - keep 10% of info logs\n",[546,2373,2375,2378,2380],{"class":548,"line":2374},23,[546,2376,2377],{"class":702},"  sampling",[546,2379,706],{"class":623},[546,2381,790],{"class":623},[546,2383,2385,2388,2390,2392,2395,2397,2400],{"class":548,"line":2384},24,[546,2386,2387],{"class":702},"    rates",[546,2389,706],{"class":623},[546,2391,624],{"class":623},[546,2393,2394],{"class":702}," info",[546,2396,706],{"class":623},[546,2398,2399],{"class":2219}," 10",[546,2401,1390],{"class":623},[546,2403,2405,2408,2410],{"class":548,"line":2404},25,[546,2406,2407],{"class":702},"    keep",[546,2409,706],{"class":623},[546,2411,2412],{"class":627}," [\n",[546,2414,2416,2419,2422,2424,2427,2430],{"class":548,"line":2415},26,[546,2417,2418],{"class":623},"      {",[546,2420,2421],{"class":702}," status",[546,2423,706],{"class":623},[546,2425,2426],{"class":2219}," 400",[546,2428,2429],{"class":623}," },",[546,2431,2432],{"class":1705},"              \u002F\u002F Always keep errors\n",[546,2434,2436,2438,2441,2443,2446,2448],{"class":548,"line":2435},27,[546,2437,2418],{"class":623},[546,2439,2440],{"class":702}," duration",[546,2442,706],{"class":623},[546,2444,2445],{"class":2219}," 1000",[546,2447,2429],{"class":623},[546,2449,2450],{"class":1705},"           \u002F\u002F Always keep slow requests\n",[546,2452,2454,2456,2458,2460,2462,2465,2467,2469],{"class":548,"line":2453},28,[546,2455,2418],{"class":623},[546,2457,1350],{"class":702},[546,2459,706],{"class":623},[546,2461,637],{"class":623},[546,2463,2464],{"class":555},"\u002Fapi\u002Fcritical\u002F**",[546,2466,714],{"class":623},[546,2468,2429],{"class":623},[546,2470,2471],{"class":1705}," \u002F\u002F Always keep critical paths\n",[546,2473,2475,2478],{"class":548,"line":2474},29,[546,2476,2477],{"class":627},"    ]",[546,2479,717],{"class":623},[546,2481,2483],{"class":548,"line":2482},30,[546,2484,2485],{"class":623},"  },\n",[546,2487,2489],{"class":548,"line":2488},31,[546,2490,650],{"emptyLinePlaceholder":649},[546,2492,2494],{"class":548,"line":2493},32,[546,2495,2496],{"class":1705},"  \u002F\u002F 5. Route-based service names\n",[546,2498,2500,2503,2505],{"class":548,"line":2499},33,[546,2501,2502],{"class":702},"  routes",[546,2504,706],{"class":623},[546,2506,790],{"class":623},[546,2508,2510,2513,2516,2518,2520,2522,2525,2527,2529,2532,2534],{"class":548,"line":2509},34,[546,2511,2512],{"class":623},"    '",[546,2514,2515],{"class":702},"\u002Fapi\u002Fauth\u002F**",[546,2517,714],{"class":623},[546,2519,706],{"class":623},[546,2521,624],{"class":623},[546,2523,2524],{"class":702}," service",[546,2526,706],{"class":623},[546,2528,637],{"class":623},[546,2530,2531],{"class":555},"auth-service",[546,2533,714],{"class":623},[546,2535,1390],{"class":623},[546,2537,2539,2541,2544,2546,2548,2550,2552,2554,2556,2559,2561],{"class":548,"line":2538},35,[546,2540,2512],{"class":623},[546,2542,2543],{"class":702},"\u002Fapi\u002Fpayment\u002F**",[546,2545,714],{"class":623},[546,2547,706],{"class":623},[546,2549,624],{"class":623},[546,2551,2524],{"class":702},[546,2553,706],{"class":623},[546,2555,637],{"class":623},[546,2557,2558],{"class":555},"payment-service",[546,2560,714],{"class":623},[546,2562,1390],{"class":623},[546,2564,2566,2568,2571,2573,2575,2577,2579,2581,2583,2586,2588],{"class":548,"line":2565},36,[546,2567,2512],{"class":623},[546,2569,2570],{"class":702},"\u002Fapi\u002Fbooking\u002F**",[546,2572,714],{"class":623},[546,2574,706],{"class":623},[546,2576,624],{"class":623},[546,2578,2524],{"class":702},[546,2580,706],{"class":623},[546,2582,637],{"class":623},[546,2584,2585],{"class":555},"booking-service",[546,2587,714],{"class":623},[546,2589,1390],{"class":623},[546,2591,2593],{"class":548,"line":2592},37,[546,2594,2485],{"class":623},[546,2596,2598],{"class":548,"line":2597},38,[546,2599,650],{"emptyLinePlaceholder":649},[546,2601,2603],{"class":548,"line":2602},39,[546,2604,2605],{"class":1705},"  \u002F\u002F 6. Custom tail sampling - business logic\n",[546,2607,2609,2612,2614,2616,2619,2621,2623],{"class":548,"line":2608},40,[546,2610,2611],{"class":690},"  keep",[546,2613,706],{"class":623},[546,2615,1214],{"class":623},[546,2617,2618],{"class":1313},"ctx",[546,2620,1442],{"class":623},[546,2622,787],{"class":659},[546,2624,790],{"class":623},[546,2626,2628,2630,2633,2635,2638,2640,2643,2645,2648,2651,2653,2656,2658,2661,2663,2666],{"class":548,"line":2627},41,[546,2629,1247],{"class":659},[546,2631,2632],{"class":627}," user",[546,2634,687],{"class":623},[546,2636,2637],{"class":627}," ctx",[546,2639,812],{"class":623},[546,2641,2642],{"class":627},"context",[546,2644,812],{"class":623},[546,2646,2647],{"class":627},"user",[546,2649,2650],{"class":619}," as",[546,2652,624],{"class":623},[546,2654,2655],{"class":702}," premium",[546,2657,1324],{"class":623},[546,2659,2660],{"class":552}," boolean",[546,2662,631],{"class":623},[546,2664,2665],{"class":623}," |",[546,2667,2668],{"class":552}," undefined\n",[546,2670,2672,2675,2677,2679,2682,2685,2687,2689,2691,2694,2696],{"class":548,"line":2671},42,[546,2673,2674],{"class":619},"    if",[546,2676,1214],{"class":702},[546,2678,2647],{"class":627},[546,2680,2681],{"class":623},"?.",[546,2683,2684],{"class":627},"premium",[546,2686,1240],{"class":702},[546,2688,2618],{"class":627},[546,2690,812],{"class":623},[546,2692,2693],{"class":627},"shouldKeep",[546,2695,687],{"class":623},[546,2697,2698],{"class":1059}," true\n",[546,2700,2702],{"class":548,"line":2701},43,[546,2703,2485],{"class":623},[546,2705,2707],{"class":548,"line":2706},44,[546,2708,650],{"emptyLinePlaceholder":649},[546,2710,2712],{"class":548,"line":2711},45,[546,2713,2714],{"class":1705},"  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n",[546,2716,2718,2721,2723,2725,2727,2729,2731],{"class":548,"line":2717},46,[546,2719,2720],{"class":690},"  enrich",[546,2722,706],{"class":623},[546,2724,1214],{"class":623},[546,2726,2618],{"class":1313},[546,2728,1442],{"class":623},[546,2730,787],{"class":659},[546,2732,790],{"class":623},[546,2734,2736,2739,2741,2743,2746,2749,2752,2754,2757,2759,2761],{"class":548,"line":2735},47,[546,2737,2738],{"class":619},"    for",[546,2740,1214],{"class":702},[546,2742,1614],{"class":659},[546,2744,2745],{"class":627}," enricher",[546,2747,2748],{"class":623}," of",[546,2750,2751],{"class":627}," enrichers",[546,2753,1240],{"class":702},[546,2755,2756],{"class":690},"enricher",[546,2758,693],{"class":702},[546,2760,2618],{"class":627},[546,2762,725],{"class":702},[546,2764,2766,2769,2771,2774,2776,2779,2781,2783,2785,2787,2789],{"class":548,"line":2765},48,[546,2767,2768],{"class":627},"    ctx",[546,2770,812],{"class":623},[546,2772,2773],{"class":627},"event",[546,2775,812],{"class":623},[546,2777,2778],{"class":627},"deploymentId",[546,2780,687],{"class":623},[546,2782,2292],{"class":627},[546,2784,812],{"class":623},[546,2786,1222],{"class":627},[546,2788,812],{"class":623},[546,2790,2791],{"class":627},"VERCEL_DEPLOYMENT_ID\n",[546,2793,2795,2797,2799,2801,2803,2806,2808,2810,2812,2814,2816],{"class":548,"line":2794},49,[546,2796,2768],{"class":627},[546,2798,812],{"class":623},[546,2800,2773],{"class":627},[546,2802,812],{"class":623},[546,2804,2805],{"class":627},"region",[546,2807,687],{"class":623},[546,2809,2292],{"class":627},[546,2811,812],{"class":623},[546,2813,1222],{"class":627},[546,2815,812],{"class":623},[546,2817,2818],{"class":627},"VERCEL_REGION\n",[546,2820,2822],{"class":548,"line":2821},50,[546,2823,2485],{"class":623},[546,2825,2827],{"class":548,"line":2826},51,[546,2828,650],{"emptyLinePlaceholder":649},[546,2830,2832,2834],{"class":548,"line":2831},52,[546,2833,1040],{"class":627},[546,2835,717],{"class":623},[546,2837,2839,2841],{"class":548,"line":2838},53,[546,2840,684],{"class":623},[546,2842,725],{"class":627},[524,2844,51],{"id":2845},"wide-events",[460,2847,2848],{},"Build up context progressively through your handler. One request = one wide event:",[536,2850,2853],{"className":609,"code":2851,"filename":2852,"language":612,"meta":542,"style":542},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  const body = await request.json()\n\n  \u002F\u002F Stage 1: User context\n  log.set({\n    user: { id: body.userId, plan: 'enterprise' },\n  })\n\n  \u002F\u002F Stage 2: Cart context\n  log.set({\n    cart: { items: body.items.length, total: body.total, currency: 'USD' },\n  })\n\n  \u002F\u002F Stage 3: Payment context\n  const payment = await processPayment(body)\n  log.set({\n    payment: { method: payment.method, cardLast4: payment.last4 },\n  })\n\n  return Response.json({ success: true, orderId: payment.orderId })\n})\n","app\u002Fapi\u002Fcheckout\u002Froute.ts",[464,2854,2855,2877,2881,2914,2926,2945,2949,2954,2966,3003,3010,3014,3019,3031,3087,3093,3097,3102,3123,3135,3171,3177,3181,3220],{"__ignoreMap":542},[546,2856,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875],{"class":548,"line":549},[546,2858,620],{"class":619},[546,2860,624],{"class":623},[546,2862,665],{"class":627},[546,2864,668],{"class":623},[546,2866,671],{"class":627},[546,2868,631],{"class":623},[546,2870,634],{"class":619},[546,2872,637],{"class":623},[546,2874,756],{"class":555},[546,2876,643],{"class":623},[546,2878,2879],{"class":548,"line":646},[546,2880,650],{"emptyLinePlaceholder":649},[546,2882,2883,2885,2887,2890,2892,2894,2896,2898,2900,2903,2905,2908,2910,2912],{"class":548,"line":653},[546,2884,656],{"class":619},[546,2886,660],{"class":659},[546,2888,2889],{"class":627}," POST ",[546,2891,774],{"class":623},[546,2893,665],{"class":690},[546,2895,693],{"class":627},[546,2897,781],{"class":659},[546,2899,1214],{"class":623},[546,2901,2902],{"class":1313},"request",[546,2904,706],{"class":623},[546,2906,2907],{"class":552}," Request",[546,2909,1442],{"class":623},[546,2911,787],{"class":659},[546,2913,790],{"class":623},[546,2915,2916,2918,2920,2922,2924],{"class":548,"line":699},[546,2917,795],{"class":659},[546,2919,676],{"class":627},[546,2921,687],{"class":623},[546,2923,671],{"class":690},[546,2925,804],{"class":702},[546,2927,2928,2930,2933,2935,2937,2939,2941,2943],{"class":548,"line":720},[546,2929,795],{"class":659},[546,2931,2932],{"class":627}," body",[546,2934,687],{"class":623},[546,2936,1258],{"class":619},[546,2938,1517],{"class":627},[546,2940,812],{"class":623},[546,2942,850],{"class":690},[546,2944,804],{"class":702},[546,2946,2947],{"class":548,"line":839},[546,2948,650],{"emptyLinePlaceholder":649},[546,2950,2951],{"class":548,"line":873},[546,2952,2953],{"class":1705},"  \u002F\u002F Stage 1: User context\n",[546,2955,2956,2958,2960,2962,2964],{"class":548,"line":1065},[546,2957,809],{"class":627},[546,2959,812],{"class":623},[546,2961,815],{"class":690},[546,2963,693],{"class":702},[546,2965,696],{"class":623},[546,2967,2968,2971,2973,2975,2978,2980,2982,2984,2987,2989,2992,2994,2996,2999,3001],{"class":548,"line":1310},[546,2969,2970],{"class":702},"    user",[546,2972,706],{"class":623},[546,2974,624],{"class":623},[546,2976,2977],{"class":702}," id",[546,2979,706],{"class":623},[546,2981,2932],{"class":627},[546,2983,812],{"class":623},[546,2985,2986],{"class":627},"userId",[546,2988,668],{"class":623},[546,2990,2991],{"class":702}," plan",[546,2993,706],{"class":623},[546,2995,637],{"class":623},[546,2997,2998],{"class":555},"enterprise",[546,3000,714],{"class":623},[546,3002,1390],{"class":623},[546,3004,3005,3008],{"class":548,"line":1340},[546,3006,3007],{"class":623},"  }",[546,3009,725],{"class":702},[546,3011,3012],{"class":548,"line":1393},[546,3013,650],{"emptyLinePlaceholder":649},[546,3015,3016],{"class":548,"line":1439},[546,3017,3018],{"class":1705},"  \u002F\u002F Stage 2: Cart context\n",[546,3020,3021,3023,3025,3027,3029],{"class":548,"line":1447},[546,3022,809],{"class":627},[546,3024,812],{"class":623},[546,3026,815],{"class":690},[546,3028,693],{"class":702},[546,3030,696],{"class":623},[546,3032,3033,3036,3038,3040,3043,3045,3047,3049,3052,3054,3057,3059,3062,3064,3066,3068,3071,3073,3076,3078,3080,3083,3085],{"class":548,"line":1476},[546,3034,3035],{"class":702},"    cart",[546,3037,706],{"class":623},[546,3039,624],{"class":623},[546,3041,3042],{"class":702}," items",[546,3044,706],{"class":623},[546,3046,2932],{"class":627},[546,3048,812],{"class":623},[546,3050,3051],{"class":627},"items",[546,3053,812],{"class":623},[546,3055,3056],{"class":627},"length",[546,3058,668],{"class":623},[546,3060,3061],{"class":702}," total",[546,3063,706],{"class":623},[546,3065,2932],{"class":627},[546,3067,812],{"class":623},[546,3069,3070],{"class":627},"total",[546,3072,668],{"class":623},[546,3074,3075],{"class":702}," currency",[546,3077,706],{"class":623},[546,3079,637],{"class":623},[546,3081,3082],{"class":555},"USD",[546,3084,714],{"class":623},[546,3086,1390],{"class":623},[546,3088,3089,3091],{"class":548,"line":1503},[546,3090,3007],{"class":623},[546,3092,725],{"class":702},[546,3094,3095],{"class":548,"line":1527},[546,3096,650],{"emptyLinePlaceholder":649},[546,3098,3099],{"class":548,"line":1532},[546,3100,3101],{"class":1705},"  \u002F\u002F Stage 3: Payment context\n",[546,3103,3104,3106,3109,3111,3113,3116,3118,3121],{"class":548,"line":1837},[546,3105,795],{"class":659},[546,3107,3108],{"class":627}," payment",[546,3110,687],{"class":623},[546,3112,1258],{"class":619},[546,3114,3115],{"class":690}," processPayment",[546,3117,693],{"class":702},[546,3119,3120],{"class":627},"body",[546,3122,725],{"class":702},[546,3124,3125,3127,3129,3131,3133],{"class":548,"line":1857},[546,3126,809],{"class":627},[546,3128,812],{"class":623},[546,3130,815],{"class":690},[546,3132,693],{"class":702},[546,3134,696],{"class":623},[546,3136,3137,3140,3142,3144,3146,3148,3150,3152,3155,3157,3160,3162,3164,3166,3169],{"class":548,"line":1863},[546,3138,3139],{"class":702},"    payment",[546,3141,706],{"class":623},[546,3143,624],{"class":623},[546,3145,1360],{"class":702},[546,3147,706],{"class":623},[546,3149,3108],{"class":627},[546,3151,812],{"class":623},[546,3153,3154],{"class":627},"method",[546,3156,668],{"class":623},[546,3158,3159],{"class":702}," cardLast4",[546,3161,706],{"class":623},[546,3163,3108],{"class":627},[546,3165,812],{"class":623},[546,3167,3168],{"class":627},"last4",[546,3170,1390],{"class":623},[546,3172,3173,3175],{"class":548,"line":2363},[546,3174,3007],{"class":623},[546,3176,725],{"class":702},[546,3178,3179],{"class":548,"line":2368},[546,3180,650],{"emptyLinePlaceholder":649},[546,3182,3183,3185,3187,3189,3191,3193,3195,3198,3200,3202,3204,3207,3209,3211,3213,3216,3218],{"class":548,"line":2374},[546,3184,842],{"class":619},[546,3186,845],{"class":627},[546,3188,812],{"class":623},[546,3190,850],{"class":690},[546,3192,693],{"class":702},[546,3194,820],{"class":623},[546,3196,3197],{"class":702}," success",[546,3199,706],{"class":623},[546,3201,1060],{"class":1059},[546,3203,668],{"class":623},[546,3205,3206],{"class":702}," orderId",[546,3208,706],{"class":623},[546,3210,3108],{"class":627},[546,3212,812],{"class":623},[546,3214,3215],{"class":627},"orderId",[546,3217,631],{"class":623},[546,3219,725],{"class":702},[546,3221,3222,3224],{"class":548,"line":2384},[546,3223,684],{"class":623},[546,3225,725],{"class":627},[460,3227,3228],{},"All fields are merged into a single wide event emitted when the handler completes:",[536,3230,3233],{"className":538,"code":3231,"filename":3232,"language":541,"meta":542,"style":542},"10:23:45.612 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n  ├─ user: id=usr_123 plan=enterprise\n  ├─ cart: items=3 total=14999 currency=USD\n  ├─ payment: method=card cardLast4=4242\n  └─ requestId: a1b2c3d4-...\n","Output (Pretty)",[464,3234,3235,3246,3260,3282,3298],{"__ignoreMap":542},[546,3236,3237,3240,3243],{"class":548,"line":549},[546,3238,3239],{"class":552},"10:23:45.612",[546,3241,3242],{"class":555}," INFO",[546,3244,3245],{"class":627}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[546,3247,3248,3251,3254,3257],{"class":548,"line":646},[546,3249,3250],{"class":552},"  ├─",[546,3252,3253],{"class":555}," user:",[546,3255,3256],{"class":555}," id=usr_123",[546,3258,3259],{"class":555}," plan=enterprise\n",[546,3261,3262,3264,3267,3270,3273,3276,3279],{"class":548,"line":653},[546,3263,3250],{"class":552},[546,3265,3266],{"class":555}," cart:",[546,3268,3269],{"class":555}," items=",[546,3271,3272],{"class":2219},"3",[546,3274,3275],{"class":555}," total=",[546,3277,3278],{"class":2219},"14999",[546,3280,3281],{"class":555}," currency=USD\n",[546,3283,3284,3286,3289,3292,3295],{"class":548,"line":699},[546,3285,3250],{"class":552},[546,3287,3288],{"class":555}," payment:",[546,3290,3291],{"class":555}," method=card",[546,3293,3294],{"class":555}," cardLast4=",[546,3296,3297],{"class":2219},"4242\n",[546,3299,3300,3303,3306],{"class":548,"line":720},[546,3301,3302],{"class":552},"  └─",[546,3304,3305],{"class":555}," requestId:",[546,3307,3308],{"class":555}," a1b2c3d4-...\n",[524,3310,3312,3313,1442],{"id":3311},"background-work-logfork","Background work (",[464,3314,3315],{},"log.fork",[460,3317,3318,3319,1910,3322,3324,3325,3330,3331,812],{},"Inside ",[464,3320,3321],{},"withEvlog",[464,3323,474],{}," returns a logger with ",[909,3326,3327],{},[464,3328,3329],{},"fork"," for child wide events. See ",[513,3332,3334],{"href":3333},"\u002Flogging\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",[536,3336,3339],{"className":609,"code":3337,"filename":3338,"language":612,"meta":542,"style":542},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async () => {\n  const log = useLogger()\n  log.fork!('enqueue', async () => {\n    const child = useLogger()\n    child.set({ job: 'queued' })\n  })\n  return Response.json({ ok: true })\n})\n","app\u002Fapi\u002Forders\u002Froute.ts",[464,3340,3341,3363,3367,3389,3401,3431,3444,3473,3479,3504],{"__ignoreMap":542},[546,3342,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361],{"class":548,"line":549},[546,3344,620],{"class":619},[546,3346,624],{"class":623},[546,3348,665],{"class":627},[546,3350,668],{"class":623},[546,3352,671],{"class":627},[546,3354,631],{"class":623},[546,3356,634],{"class":619},[546,3358,637],{"class":623},[546,3360,756],{"class":555},[546,3362,643],{"class":623},[546,3364,3365],{"class":548,"line":646},[546,3366,650],{"emptyLinePlaceholder":649},[546,3368,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387],{"class":548,"line":653},[546,3370,656],{"class":619},[546,3372,660],{"class":659},[546,3374,2889],{"class":627},[546,3376,774],{"class":623},[546,3378,665],{"class":690},[546,3380,693],{"class":627},[546,3382,781],{"class":659},[546,3384,784],{"class":623},[546,3386,787],{"class":659},[546,3388,790],{"class":623},[546,3390,3391,3393,3395,3397,3399],{"class":548,"line":699},[546,3392,795],{"class":659},[546,3394,676],{"class":627},[546,3396,687],{"class":623},[546,3398,671],{"class":690},[546,3400,804],{"class":702},[546,3402,3403,3405,3407,3409,3412,3414,3416,3419,3421,3423,3425,3427,3429],{"class":548,"line":720},[546,3404,809],{"class":627},[546,3406,812],{"class":623},[546,3408,3329],{"class":690},[546,3410,3411],{"class":623},"!",[546,3413,693],{"class":702},[546,3415,714],{"class":623},[546,3417,3418],{"class":555},"enqueue",[546,3420,714],{"class":623},[546,3422,668],{"class":623},[546,3424,1197],{"class":659},[546,3426,784],{"class":623},[546,3428,787],{"class":659},[546,3430,790],{"class":623},[546,3432,3433,3435,3438,3440,3442],{"class":548,"line":839},[546,3434,1247],{"class":659},[546,3436,3437],{"class":627}," child",[546,3439,687],{"class":623},[546,3441,671],{"class":690},[546,3443,804],{"class":702},[546,3445,3446,3449,3451,3453,3455,3457,3460,3462,3464,3467,3469,3471],{"class":548,"line":873},[546,3447,3448],{"class":627},"    child",[546,3450,812],{"class":623},[546,3452,815],{"class":690},[546,3454,693],{"class":702},[546,3456,820],{"class":623},[546,3458,3459],{"class":702}," job",[546,3461,706],{"class":623},[546,3463,637],{"class":623},[546,3465,3466],{"class":555},"queued",[546,3468,714],{"class":623},[546,3470,631],{"class":623},[546,3472,725],{"class":702},[546,3474,3475,3477],{"class":548,"line":1065},[546,3476,3007],{"class":623},[546,3478,725],{"class":702},[546,3480,3481,3483,3485,3487,3489,3491,3493,3496,3498,3500,3502],{"class":548,"line":1310},[546,3482,842],{"class":619},[546,3484,845],{"class":627},[546,3486,812],{"class":623},[546,3488,850],{"class":690},[546,3490,693],{"class":702},[546,3492,820],{"class":623},[546,3494,3495],{"class":702}," ok",[546,3497,706],{"class":623},[546,3499,1060],{"class":1059},[546,3501,631],{"class":623},[546,3503,725],{"class":702},[546,3505,3506,3508],{"class":548,"line":1340},[546,3507,684],{"class":623},[546,3509,725],{"class":627},[524,3511,3513],{"id":3512},"error-handling","Error Handling",[460,3515,3516,3517,3520,3521,1910,3524,3527,3528,3531],{},"Use ",[464,3518,3519],{},"createError"," for structured errors with ",[464,3522,3523],{},"why",[464,3525,3526],{},"fix",", and ",[464,3529,3530],{},"link"," fields that help developers debug in both logs and API responses:",[536,3533,3536],{"className":609,"code":3534,"filename":3535,"language":612,"meta":542,"style":542},"import { withEvlog, useLogger, createError } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  const body = await request.json()\n\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 (e.g. 4999 for $49.99)',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount',\n    })\n  }\n\n  const result = await chargeCard(body)\n\n  if (!result.success) {\n    log.error(new Error(`Payment declined: ${result.reason}`))\n    throw createError({\n      status: 402,\n      message: 'Payment declined',\n      why: `Card declined by issuer: ${result.reason}`,\n      fix: 'Try a different payment method or contact your bank',\n    })\n  }\n\n  return Response.json({ success: true })\n})\n","app\u002Fapi\u002Fpayment\u002Fprocess\u002Froute.ts",[464,3537,3538,3565,3569,3599,3611,3629,3633,3669,3673,3695,3706,3717,3733,3749,3765,3781,3788,3792,3796,3816,3820,3840,3879,3889,3900,3915,3939,3954,3960,3964,3968,3992],{"__ignoreMap":542},[546,3539,3540,3542,3544,3546,3548,3550,3552,3555,3557,3559,3561,3563],{"class":548,"line":549},[546,3541,620],{"class":619},[546,3543,624],{"class":623},[546,3545,665],{"class":627},[546,3547,668],{"class":623},[546,3549,671],{"class":627},[546,3551,668],{"class":623},[546,3553,3554],{"class":627}," createError",[546,3556,631],{"class":623},[546,3558,634],{"class":619},[546,3560,637],{"class":623},[546,3562,756],{"class":555},[546,3564,643],{"class":623},[546,3566,3567],{"class":548,"line":646},[546,3568,650],{"emptyLinePlaceholder":649},[546,3570,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597],{"class":548,"line":653},[546,3572,656],{"class":619},[546,3574,660],{"class":659},[546,3576,2889],{"class":627},[546,3578,774],{"class":623},[546,3580,665],{"class":690},[546,3582,693],{"class":627},[546,3584,781],{"class":659},[546,3586,1214],{"class":623},[546,3588,2902],{"class":1313},[546,3590,706],{"class":623},[546,3592,2907],{"class":552},[546,3594,1442],{"class":623},[546,3596,787],{"class":659},[546,3598,790],{"class":623},[546,3600,3601,3603,3605,3607,3609],{"class":548,"line":699},[546,3602,795],{"class":659},[546,3604,676],{"class":627},[546,3606,687],{"class":623},[546,3608,671],{"class":690},[546,3610,804],{"class":702},[546,3612,3613,3615,3617,3619,3621,3623,3625,3627],{"class":548,"line":720},[546,3614,795],{"class":659},[546,3616,2932],{"class":627},[546,3618,687],{"class":623},[546,3620,1258],{"class":619},[546,3622,1517],{"class":627},[546,3624,812],{"class":623},[546,3626,850],{"class":690},[546,3628,804],{"class":702},[546,3630,3631],{"class":548,"line":839},[546,3632,650],{"emptyLinePlaceholder":649},[546,3634,3635,3637,3639,3641,3643,3645,3647,3649,3651,3654,3656,3658,3660,3663,3665,3667],{"class":548,"line":873},[546,3636,809],{"class":627},[546,3638,812],{"class":623},[546,3640,815],{"class":690},[546,3642,693],{"class":702},[546,3644,820],{"class":623},[546,3646,3108],{"class":702},[546,3648,706],{"class":623},[546,3650,624],{"class":623},[546,3652,3653],{"class":702}," amount",[546,3655,706],{"class":623},[546,3657,2932],{"class":627},[546,3659,812],{"class":623},[546,3661,3662],{"class":627},"amount",[546,3664,631],{"class":623},[546,3666,631],{"class":623},[546,3668,725],{"class":702},[546,3670,3671],{"class":548,"line":1065},[546,3672,650],{"emptyLinePlaceholder":649},[546,3674,3675,3677,3679,3681,3683,3685,3688,3691,3693],{"class":548,"line":1310},[546,3676,1211],{"class":619},[546,3678,1214],{"class":702},[546,3680,3120],{"class":627},[546,3682,812],{"class":623},[546,3684,3662],{"class":627},[546,3686,3687],{"class":623}," \u003C=",[546,3689,3690],{"class":2219}," 0",[546,3692,1240],{"class":702},[546,3694,696],{"class":623},[546,3696,3697,3700,3702,3704],{"class":548,"line":1340},[546,3698,3699],{"class":619},"    throw",[546,3701,3554],{"class":690},[546,3703,693],{"class":702},[546,3705,696],{"class":623},[546,3707,3708,3711,3713,3715],{"class":548,"line":1393},[546,3709,3710],{"class":702},"      status",[546,3712,706],{"class":623},[546,3714,2426],{"class":2219},[546,3716,717],{"class":623},[546,3718,3719,3722,3724,3726,3729,3731],{"class":548,"line":1439},[546,3720,3721],{"class":702},"      message",[546,3723,706],{"class":623},[546,3725,637],{"class":623},[546,3727,3728],{"class":555},"Invalid payment amount",[546,3730,714],{"class":623},[546,3732,717],{"class":623},[546,3734,3735,3738,3740,3742,3745,3747],{"class":548,"line":1447},[546,3736,3737],{"class":702},"      why",[546,3739,706],{"class":623},[546,3741,637],{"class":623},[546,3743,3744],{"class":555},"The amount must be a positive number",[546,3746,714],{"class":623},[546,3748,717],{"class":623},[546,3750,3751,3754,3756,3758,3761,3763],{"class":548,"line":1476},[546,3752,3753],{"class":702},"      fix",[546,3755,706],{"class":623},[546,3757,637],{"class":623},[546,3759,3760],{"class":555},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[546,3762,714],{"class":623},[546,3764,717],{"class":623},[546,3766,3767,3770,3772,3774,3777,3779],{"class":548,"line":1503},[546,3768,3769],{"class":702},"      link",[546,3771,706],{"class":623},[546,3773,637],{"class":623},[546,3775,3776],{"class":555},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[546,3778,714],{"class":623},[546,3780,717],{"class":623},[546,3782,3783,3786],{"class":548,"line":1527},[546,3784,3785],{"class":623},"    }",[546,3787,725],{"class":702},[546,3789,3790],{"class":548,"line":1532},[546,3791,1284],{"class":623},[546,3793,3794],{"class":548,"line":1837},[546,3795,650],{"emptyLinePlaceholder":649},[546,3797,3798,3800,3803,3805,3807,3810,3812,3814],{"class":548,"line":1857},[546,3799,795],{"class":659},[546,3801,3802],{"class":627}," result",[546,3804,687],{"class":623},[546,3806,1258],{"class":619},[546,3808,3809],{"class":690}," chargeCard",[546,3811,693],{"class":702},[546,3813,3120],{"class":627},[546,3815,725],{"class":702},[546,3817,3818],{"class":548,"line":1863},[546,3819,650],{"emptyLinePlaceholder":649},[546,3821,3822,3824,3826,3828,3831,3833,3836,3838],{"class":548,"line":2363},[546,3823,1211],{"class":619},[546,3825,1214],{"class":702},[546,3827,3411],{"class":623},[546,3829,3830],{"class":627},"result",[546,3832,812],{"class":623},[546,3834,3835],{"class":627},"success",[546,3837,1240],{"class":702},[546,3839,696],{"class":623},[546,3841,3842,3845,3847,3849,3851,3854,3856,3858,3861,3864,3867,3869,3871,3874,3877],{"class":548,"line":2368},[546,3843,3844],{"class":627},"    log",[546,3846,812],{"class":623},[546,3848,1512],{"class":690},[546,3850,693],{"class":702},[546,3852,3853],{"class":623},"new",[546,3855,1335],{"class":690},[546,3857,693],{"class":702},[546,3859,3860],{"class":623},"`",[546,3862,3863],{"class":555},"Payment declined: ",[546,3865,3866],{"class":623},"${",[546,3868,3830],{"class":627},[546,3870,812],{"class":623},[546,3872,3873],{"class":627},"reason",[546,3875,3876],{"class":623},"}`",[546,3878,1172],{"class":702},[546,3880,3881,3883,3885,3887],{"class":548,"line":2374},[546,3882,3699],{"class":619},[546,3884,3554],{"class":690},[546,3886,693],{"class":702},[546,3888,696],{"class":623},[546,3890,3891,3893,3895,3898],{"class":548,"line":2384},[546,3892,3710],{"class":702},[546,3894,706],{"class":623},[546,3896,3897],{"class":2219}," 402",[546,3899,717],{"class":623},[546,3901,3902,3904,3906,3908,3911,3913],{"class":548,"line":2404},[546,3903,3721],{"class":702},[546,3905,706],{"class":623},[546,3907,637],{"class":623},[546,3909,3910],{"class":555},"Payment declined",[546,3912,714],{"class":623},[546,3914,717],{"class":623},[546,3916,3917,3919,3921,3924,3927,3929,3931,3933,3935,3937],{"class":548,"line":2415},[546,3918,3737],{"class":702},[546,3920,706],{"class":623},[546,3922,3923],{"class":623}," `",[546,3925,3926],{"class":555},"Card declined by issuer: ",[546,3928,3866],{"class":623},[546,3930,3830],{"class":627},[546,3932,812],{"class":623},[546,3934,3873],{"class":627},[546,3936,3876],{"class":623},[546,3938,717],{"class":623},[546,3940,3941,3943,3945,3947,3950,3952],{"class":548,"line":2435},[546,3942,3753],{"class":702},[546,3944,706],{"class":623},[546,3946,637],{"class":623},[546,3948,3949],{"class":555},"Try a different payment method or contact your bank",[546,3951,714],{"class":623},[546,3953,717],{"class":623},[546,3955,3956,3958],{"class":548,"line":2453},[546,3957,3785],{"class":623},[546,3959,725],{"class":702},[546,3961,3962],{"class":548,"line":2474},[546,3963,1284],{"class":623},[546,3965,3966],{"class":548,"line":2482},[546,3967,650],{"emptyLinePlaceholder":649},[546,3969,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990],{"class":548,"line":2488},[546,3971,842],{"class":619},[546,3973,845],{"class":627},[546,3975,812],{"class":623},[546,3977,850],{"class":690},[546,3979,693],{"class":702},[546,3981,820],{"class":623},[546,3983,3197],{"class":702},[546,3985,706],{"class":623},[546,3987,1060],{"class":1059},[546,3989,631],{"class":623},[546,3991,725],{"class":702},[546,3993,3994,3996],{"class":548,"line":2493},[546,3995,684],{"class":623},[546,3997,725],{"class":627},[460,3999,4000,4002,4003,4006],{},[464,4001,470],{}," catches ",[464,4004,4005],{},"EvlogError"," and returns a structured JSON response (like Nitro does for Nuxt):",[536,4008,4012],{"className":4009,"code":4010,"filename":4011,"language":850,"meta":542,"style":542},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"EvlogError\",\n  \"message\": \"Payment declined\",\n  \"status\": 402,\n  \"data\": {\n    \"why\": \"Card declined by issuer: insufficient_funds\",\n    \"fix\": \"Try a different payment method or contact your bank\"\n  }\n}\n","Response (402)",[464,4013,4014,4018,4040,4059,4074,4087,4107,4124,4128],{"__ignoreMap":542},[546,4015,4016],{"class":548,"line":549},[546,4017,696],{"class":623},[546,4019,4020,4023,4026,4029,4031,4034,4036,4038],{"class":548,"line":646},[546,4021,4022],{"class":623},"  \"",[546,4024,4025],{"class":659},"name",[546,4027,4028],{"class":623},"\"",[546,4030,706],{"class":623},[546,4032,4033],{"class":623}," \"",[546,4035,4005],{"class":555},[546,4037,4028],{"class":623},[546,4039,717],{"class":623},[546,4041,4042,4044,4047,4049,4051,4053,4055,4057],{"class":548,"line":653},[546,4043,4022],{"class":623},[546,4045,4046],{"class":659},"message",[546,4048,4028],{"class":623},[546,4050,706],{"class":623},[546,4052,4033],{"class":623},[546,4054,3910],{"class":555},[546,4056,4028],{"class":623},[546,4058,717],{"class":623},[546,4060,4061,4063,4066,4068,4070,4072],{"class":548,"line":699},[546,4062,4022],{"class":623},[546,4064,4065],{"class":659},"status",[546,4067,4028],{"class":623},[546,4069,706],{"class":623},[546,4071,3897],{"class":2219},[546,4073,717],{"class":623},[546,4075,4076,4078,4081,4083,4085],{"class":548,"line":720},[546,4077,4022],{"class":623},[546,4079,4080],{"class":659},"data",[546,4082,4028],{"class":623},[546,4084,706],{"class":623},[546,4086,790],{"class":623},[546,4088,4089,4092,4094,4096,4098,4100,4103,4105],{"class":548,"line":839},[546,4090,4091],{"class":623},"    \"",[546,4093,3523],{"class":552},[546,4095,4028],{"class":623},[546,4097,706],{"class":623},[546,4099,4033],{"class":623},[546,4101,4102],{"class":555},"Card declined by issuer: insufficient_funds",[546,4104,4028],{"class":623},[546,4106,717],{"class":623},[546,4108,4109,4111,4113,4115,4117,4119,4121],{"class":548,"line":873},[546,4110,4091],{"class":623},[546,4112,3526],{"class":552},[546,4114,4028],{"class":623},[546,4116,706],{"class":623},[546,4118,4033],{"class":623},[546,4120,3949],{"class":555},[546,4122,4123],{"class":623},"\"\n",[546,4125,4126],{"class":548,"line":1065},[546,4127,1284],{"class":623},[546,4129,4130],{"class":548,"line":1310},[546,4131,1289],{"class":623},[460,4133,4134],{},"In the terminal, the error renders with colored output:",[536,4136,4139],{"className":538,"code":4137,"filename":4138,"language":541,"meta":542,"style":542},"Error: Payment declined\nWhy: Card declined by issuer: insufficient_funds\nFix: Try a different payment method or contact your bank\n","Terminal output",[464,4140,4141,4152,4172],{"__ignoreMap":542},[546,4142,4143,4146,4149],{"class":548,"line":549},[546,4144,4145],{"class":552},"Error:",[546,4147,4148],{"class":555}," Payment",[546,4150,4151],{"class":555}," declined\n",[546,4153,4154,4157,4160,4163,4166,4169],{"class":548,"line":646},[546,4155,4156],{"class":552},"Why:",[546,4158,4159],{"class":555}," Card",[546,4161,4162],{"class":555}," declined",[546,4164,4165],{"class":555}," by",[546,4167,4168],{"class":555}," issuer:",[546,4170,4171],{"class":555}," insufficient_funds\n",[546,4173,4174,4177,4180,4183,4186,4188,4190,4193,4196,4199],{"class":548,"line":653},[546,4175,4176],{"class":552},"Fix:",[546,4178,4179],{"class":555}," Try",[546,4181,4182],{"class":555}," a",[546,4184,4185],{"class":555}," different",[546,4187,3108],{"class":555},[546,4189,1360],{"class":555},[546,4191,4192],{"class":555}," or",[546,4194,4195],{"class":555}," contact",[546,4197,4198],{"class":555}," your",[546,4200,4201],{"class":555}," bank\n",[528,4203,4205],{"id":4204},"parsing-errors-on-the-client","Parsing Errors on the Client",[460,4207,3516,4208,4211,4212,4214,4215,4218],{},[464,4209,4210],{},"parseError"," to extract the structured fields from any error, whether it's a fetch response, an ",[464,4213,4005],{},", or a plain ",[464,4216,4217],{},"Error"," object:",[536,4220,4225],{"className":4221,"code":4222,"filename":4223,"language":4224,"meta":542,"style":542},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'use client'\nimport { parseError } from 'evlog'\n\nasync function handleSubmit(formData: FormData) {\n  try {\n    const res = await fetch('\u002Fapi\u002Fpayment\u002Fprocess', {\n      method: 'POST',\n      body: JSON.stringify({ amount: Number(formData.get('amount')) }),\n    })\n    if (!res.ok) throw { data: await res.json(), status: res.status }\n  } catch (error) {\n    const { message, status, why, fix, link } = parseError(error)\n    \u002F\u002F message: \"Payment declined\"\n    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n  }\n}\n","app\u002Fcomponents\u002FPaymentForm.tsx","tsx",[464,4226,4227,4236,4255,4259,4282,4289,4316,4332,4383,4389,4442,4457,4496,4501,4506,4511,4515],{"__ignoreMap":542},[546,4228,4229,4231,4234],{"class":548,"line":549},[546,4230,714],{"class":623},[546,4232,4233],{"class":555},"use client",[546,4235,643],{"class":623},[546,4237,4238,4240,4242,4245,4247,4249,4251,4253],{"class":548,"line":646},[546,4239,620],{"class":619},[546,4241,624],{"class":623},[546,4243,4244],{"class":627}," parseError",[546,4246,631],{"class":623},[546,4248,634],{"class":619},[546,4250,637],{"class":623},[546,4252,2055],{"class":555},[546,4254,643],{"class":623},[546,4256,4257],{"class":548,"line":653},[546,4258,650],{"emptyLinePlaceholder":649},[546,4260,4261,4263,4265,4268,4270,4273,4275,4278,4280],{"class":548,"line":699},[546,4262,781],{"class":659},[546,4264,1200],{"class":659},[546,4266,4267],{"class":690}," handleSubmit",[546,4269,693],{"class":623},[546,4271,4272],{"class":1313},"formData",[546,4274,706],{"class":623},[546,4276,4277],{"class":552}," FormData",[546,4279,1442],{"class":623},[546,4281,790],{"class":623},[546,4283,4284,4287],{"class":548,"line":720},[546,4285,4286],{"class":619},"  try",[546,4288,790],{"class":623},[546,4290,4291,4293,4296,4298,4300,4303,4305,4307,4310,4312,4314],{"class":548,"line":839},[546,4292,1247],{"class":659},[546,4294,4295],{"class":627}," res",[546,4297,687],{"class":623},[546,4299,1258],{"class":619},[546,4301,4302],{"class":690}," fetch",[546,4304,693],{"class":702},[546,4306,714],{"class":623},[546,4308,4309],{"class":555},"\u002Fapi\u002Fpayment\u002Fprocess",[546,4311,714],{"class":623},[546,4313,668],{"class":623},[546,4315,790],{"class":623},[546,4317,4318,4321,4323,4325,4328,4330],{"class":548,"line":873},[546,4319,4320],{"class":702},"      method",[546,4322,706],{"class":623},[546,4324,637],{"class":623},[546,4326,4327],{"class":555},"POST",[546,4329,714],{"class":623},[546,4331,717],{"class":623},[546,4333,4334,4337,4339,4342,4344,4346,4348,4350,4352,4354,4357,4359,4361,4363,4366,4368,4370,4372,4374,4377,4379,4381],{"class":548,"line":1065},[546,4335,4336],{"class":702},"      body",[546,4338,706],{"class":623},[546,4340,4341],{"class":627}," JSON",[546,4343,812],{"class":623},[546,4345,1971],{"class":690},[546,4347,693],{"class":702},[546,4349,820],{"class":623},[546,4351,3653],{"class":702},[546,4353,706],{"class":623},[546,4355,4356],{"class":690}," Number",[546,4358,693],{"class":702},[546,4360,4272],{"class":627},[546,4362,812],{"class":623},[546,4364,4365],{"class":690},"get",[546,4367,693],{"class":702},[546,4369,714],{"class":623},[546,4371,3662],{"class":555},[546,4373,714],{"class":623},[546,4375,4376],{"class":702},")) ",[546,4378,684],{"class":623},[546,4380,1442],{"class":702},[546,4382,717],{"class":623},[546,4384,4385,4387],{"class":548,"line":1310},[546,4386,3785],{"class":623},[546,4388,725],{"class":702},[546,4390,4391,4393,4395,4397,4400,4402,4405,4407,4410,4412,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439],{"class":548,"line":1340},[546,4392,2674],{"class":619},[546,4394,1214],{"class":702},[546,4396,3411],{"class":623},[546,4398,4399],{"class":627},"res",[546,4401,812],{"class":623},[546,4403,4404],{"class":627},"ok",[546,4406,1240],{"class":702},[546,4408,4409],{"class":619},"throw",[546,4411,624],{"class":623},[546,4413,4414],{"class":702}," data",[546,4416,706],{"class":623},[546,4418,1258],{"class":619},[546,4420,4295],{"class":627},[546,4422,812],{"class":623},[546,4424,850],{"class":690},[546,4426,1047],{"class":702},[546,4428,668],{"class":623},[546,4430,2421],{"class":702},[546,4432,706],{"class":623},[546,4434,4295],{"class":627},[546,4436,812],{"class":623},[546,4438,4065],{"class":627},[546,4440,4441],{"class":623}," }\n",[546,4443,4444,4446,4449,4451,4453,4455],{"class":548,"line":1393},[546,4445,3007],{"class":623},[546,4447,4448],{"class":619}," catch",[546,4450,1214],{"class":702},[546,4452,1512],{"class":627},[546,4454,1240],{"class":702},[546,4456,696],{"class":623},[546,4458,4459,4461,4463,4465,4467,4469,4471,4474,4476,4479,4481,4484,4486,4488,4490,4492,4494],{"class":548,"line":1439},[546,4460,1247],{"class":659},[546,4462,624],{"class":623},[546,4464,857],{"class":627},[546,4466,668],{"class":623},[546,4468,2421],{"class":627},[546,4470,668],{"class":623},[546,4472,4473],{"class":627}," why",[546,4475,668],{"class":623},[546,4477,4478],{"class":627}," fix",[546,4480,668],{"class":623},[546,4482,4483],{"class":627}," link",[546,4485,631],{"class":623},[546,4487,687],{"class":623},[546,4489,4244],{"class":690},[546,4491,693],{"class":702},[546,4493,1512],{"class":627},[546,4495,725],{"class":702},[546,4497,4498],{"class":548,"line":1447},[546,4499,4500],{"class":1705},"    \u002F\u002F message: \"Payment declined\"\n",[546,4502,4503],{"class":548,"line":1476},[546,4504,4505],{"class":1705},"    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n",[546,4507,4508],{"class":548,"line":1503},[546,4509,4510],{"class":1705},"    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n",[546,4512,4513],{"class":548,"line":1527},[546,4514,1284],{"class":623},[546,4516,4517],{"class":548,"line":1532},[546,4518,1289],{"class":623},[460,4520,4521,4523,4524,4527,4528,4531],{},[464,4522,4210],{}," normalizes any error shape into a flat ",[464,4525,4526],{},"{ message, status, why?, fix?, link? }"," object, so your UI code never has to dig through nested ",[464,4529,4530],{},"data.data"," or check for different error formats.",[524,4533,170],{"id":4534},"configuration-1",[898,4536,4537,4538,4541,4542,1910,4544,1910,4546,1910,4548,4550],{"color":900,"icon":64},"See the ",[513,4539,4540],{"href":171},"Configuration reference"," for the full list of shared options (",[464,4543,1954],{},[464,4545,1962],{},[464,4547,1965],{},[464,4549,1968],{},", middleware options, etc.).",[460,4552,1948,4553,4555],{},[464,4554,466],{}," factory accepts the following options:",[1976,4557,4558,4570],{},[1979,4559,4560],{},[1982,4561,4562,4564,4566,4568],{},[1985,4563,1987],{},[1985,4565,1990],{},[1985,4567,1993],{},[1985,4569,1996],{},[1998,4571,4572,4590,4607,4627,4645,4664,4683,4702,4721,4739],{},[1982,4573,4574,4578,4582,4587],{},[2003,4575,4576],{},[464,4577,1957],{},[2003,4579,4580],{},[464,4581,1380],{},[2003,4583,4584],{},[464,4585,4586],{},"'app'",[2003,4588,4589],{},"Service name shown in logs",[1982,4591,4592,4597,4601,4604],{},[2003,4593,4594],{},[464,4595,4596],{},"environment",[2003,4598,4599],{},[464,4600,1380],{},[2003,4602,4603],{},"Auto-detected",[2003,4605,4606],{},"Environment name",[1982,4608,4609,4614,4619,4624],{},[2003,4610,4611],{},[464,4612,4613],{},"include",[2003,4615,4616],{},[464,4617,4618],{},"string[]",[2003,4620,4621],{},[464,4622,4623],{},"undefined",[2003,4625,4626],{},"Route patterns to log",[1982,4628,4629,4634,4638,4642],{},[2003,4630,4631],{},[464,4632,4633],{},"exclude",[2003,4635,4636],{},[464,4637,4618],{},[2003,4639,4640],{},[464,4641,4623],{},[2003,4643,4644],{},"Route patterns to exclude",[1982,4646,4647,4652,4657,4661],{},[2003,4648,4649],{},[464,4650,4651],{},"routes",[2003,4653,4654],{},[464,4655,4656],{},"Record\u003Cstring, RouteConfig>",[2003,4658,4659],{},[464,4660,4623],{},[2003,4662,4663],{},"Route-specific service configuration",[1982,4665,4666,4671,4676,4680],{},[2003,4667,4668],{},[464,4669,4670],{},"sampling.rates",[2003,4672,4673],{},[464,4674,4675],{},"object",[2003,4677,4678],{},[464,4679,4623],{},[2003,4681,4682],{},"Head sampling rates per log level",[1982,4684,4685,4690,4695,4699],{},[2003,4686,4687],{},[464,4688,4689],{},"sampling.keep",[2003,4691,4692],{},[464,4693,4694],{},"array",[2003,4696,4697],{},[464,4698,4623],{},[2003,4700,4701],{},"Tail sampling conditions",[1982,4703,4704,4709,4714,4718],{},[2003,4705,4706],{},[464,4707,4708],{},"keep",[2003,4710,4711],{},[464,4712,4713],{},"(ctx: TailSamplingContext) => void",[2003,4715,4716],{},[464,4717,4623],{},[2003,4719,4720],{},"Custom tail sampling callback",[1982,4722,4723,4727,4732,4736],{},[2003,4724,4725],{},[464,4726,942],{},[2003,4728,4729],{},[464,4730,4731],{},"DrainFunction",[2003,4733,4734],{},[464,4735,4623],{},[2003,4737,4738],{},"Drain adapter for external services",[1982,4740,4741,4746,4751,4755],{},[2003,4742,4743],{},[464,4744,4745],{},"enrich",[2003,4747,4748],{},[464,4749,4750],{},"(ctx: EnrichContext) => void",[2003,4752,4753],{},[464,4754,4623],{},[2003,4756,4757],{},"Event enrichment callback",[524,4759,4761],{"id":4760},"tail-sampling","Tail Sampling",[460,4763,4764],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[536,4766,4768],{"className":609,"code":4767,"filename":611,"language":612,"meta":542,"style":542},"export const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: { info: 10 }, \u002F\u002F Only keep 10% of info logs\n    keep: [\n      { status: 400 },              \u002F\u002F Always keep 4xx\u002F5xx\n      { duration: 1000 },           \u002F\u002F Always keep slow requests\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F Always keep critical paths\n    ],\n  },\n  \u002F\u002F Custom: always keep premium user requests\n  keep: (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  },\n})\n",[464,4769,4770,4795,4809,4817,4836,4844,4859,4873,4891,4897,4901,4906,4922,4956,4980,4984],{"__ignoreMap":542},[546,4771,4772,4774,4776,4778,4780,4782,4785,4787,4789,4791,4793],{"class":548,"line":549},[546,4773,656],{"class":619},[546,4775,660],{"class":659},[546,4777,624],{"class":623},[546,4779,665],{"class":627},[546,4781,668],{"class":623},[546,4783,4784],{"class":627}," useLogger ",[546,4786,684],{"class":623},[546,4788,687],{"class":623},[546,4790,628],{"class":690},[546,4792,693],{"class":627},[546,4794,696],{"class":623},[546,4796,4797,4799,4801,4803,4805,4807],{"class":548,"line":646},[546,4798,703],{"class":702},[546,4800,706],{"class":623},[546,4802,637],{"class":623},[546,4804,711],{"class":555},[546,4806,714],{"class":623},[546,4808,717],{"class":623},[546,4810,4811,4813,4815],{"class":548,"line":653},[546,4812,2377],{"class":702},[546,4814,706],{"class":623},[546,4816,790],{"class":623},[546,4818,4819,4821,4823,4825,4827,4829,4831,4833],{"class":548,"line":699},[546,4820,2387],{"class":702},[546,4822,706],{"class":623},[546,4824,624],{"class":623},[546,4826,2394],{"class":702},[546,4828,706],{"class":623},[546,4830,2399],{"class":2219},[546,4832,2429],{"class":623},[546,4834,4835],{"class":1705}," \u002F\u002F Only keep 10% of info logs\n",[546,4837,4838,4840,4842],{"class":548,"line":720},[546,4839,2407],{"class":702},[546,4841,706],{"class":623},[546,4843,2412],{"class":627},[546,4845,4846,4848,4850,4852,4854,4856],{"class":548,"line":839},[546,4847,2418],{"class":623},[546,4849,2421],{"class":702},[546,4851,706],{"class":623},[546,4853,2426],{"class":2219},[546,4855,2429],{"class":623},[546,4857,4858],{"class":1705},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[546,4860,4861,4863,4865,4867,4869,4871],{"class":548,"line":873},[546,4862,2418],{"class":623},[546,4864,2440],{"class":702},[546,4866,706],{"class":623},[546,4868,2445],{"class":2219},[546,4870,2429],{"class":623},[546,4872,2450],{"class":1705},[546,4874,4875,4877,4879,4881,4883,4885,4887,4889],{"class":548,"line":1065},[546,4876,2418],{"class":623},[546,4878,1350],{"class":702},[546,4880,706],{"class":623},[546,4882,637],{"class":623},[546,4884,2464],{"class":555},[546,4886,714],{"class":623},[546,4888,2429],{"class":623},[546,4890,2471],{"class":1705},[546,4892,4893,4895],{"class":548,"line":1310},[546,4894,2477],{"class":627},[546,4896,717],{"class":623},[546,4898,4899],{"class":548,"line":1340},[546,4900,2485],{"class":623},[546,4902,4903],{"class":548,"line":1393},[546,4904,4905],{"class":1705},"  \u002F\u002F Custom: always keep premium user requests\n",[546,4907,4908,4910,4912,4914,4916,4918,4920],{"class":548,"line":1439},[546,4909,2611],{"class":690},[546,4911,706],{"class":623},[546,4913,1214],{"class":623},[546,4915,2618],{"class":1313},[546,4917,1442],{"class":623},[546,4919,787],{"class":659},[546,4921,790],{"class":623},[546,4923,4924,4926,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954],{"class":548,"line":1447},[546,4925,1247],{"class":659},[546,4927,2632],{"class":627},[546,4929,687],{"class":623},[546,4931,2637],{"class":627},[546,4933,812],{"class":623},[546,4935,2642],{"class":627},[546,4937,812],{"class":623},[546,4939,2647],{"class":627},[546,4941,2650],{"class":619},[546,4943,624],{"class":623},[546,4945,2655],{"class":702},[546,4947,1324],{"class":623},[546,4949,2660],{"class":552},[546,4951,631],{"class":623},[546,4953,2665],{"class":623},[546,4955,2668],{"class":552},[546,4957,4958,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978],{"class":548,"line":1476},[546,4959,2674],{"class":619},[546,4961,1214],{"class":702},[546,4963,2647],{"class":627},[546,4965,2681],{"class":623},[546,4967,2684],{"class":627},[546,4969,1240],{"class":702},[546,4971,2618],{"class":627},[546,4973,812],{"class":623},[546,4975,2693],{"class":627},[546,4977,687],{"class":623},[546,4979,2698],{"class":1059},[546,4981,4982],{"class":548,"line":1503},[546,4983,2485],{"class":623},[546,4985,4986,4988],{"class":548,"line":1527},[546,4987,684],{"class":623},[546,4989,725],{"class":627},[460,4991,1948,4992,4994],{},[464,4993,4708],{}," rules use OR logic: any match forces the event through regardless of head sampling.",[524,4996,114],{"id":4997},"middleware",[460,4999,5000,5001,1561,5004,5007,5008,5010],{},"Set ",[464,5002,5003],{},"x-request-id",[464,5005,5006],{},"x-evlog-start"," headers so ",[464,5009,470],{}," can correlate timing across the middleware -> handler chain:",[536,5012,5015],{"className":609,"code":5013,"filename":5014,"language":612,"meta":542,"style":542},"import { evlogMiddleware } from 'evlog\u002Fnext'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['\u002Fapi\u002F:path*'],\n}\n","proxy.ts",[464,5016,5017,5036,5040,5055,5059,5072,5093],{"__ignoreMap":542},[546,5018,5019,5021,5023,5026,5028,5030,5032,5034],{"class":548,"line":549},[546,5020,620],{"class":619},[546,5022,624],{"class":623},[546,5024,5025],{"class":627}," evlogMiddleware",[546,5027,631],{"class":623},[546,5029,634],{"class":619},[546,5031,637],{"class":623},[546,5033,640],{"class":555},[546,5035,643],{"class":623},[546,5037,5038],{"class":548,"line":646},[546,5039,650],{"emptyLinePlaceholder":649},[546,5041,5042,5044,5046,5049,5051,5053],{"class":548,"line":653},[546,5043,656],{"class":619},[546,5045,660],{"class":659},[546,5047,5048],{"class":627}," proxy ",[546,5050,774],{"class":623},[546,5052,5025],{"class":690},[546,5054,804],{"class":627},[546,5056,5057],{"class":548,"line":699},[546,5058,650],{"emptyLinePlaceholder":649},[546,5060,5061,5063,5065,5068,5070],{"class":548,"line":720},[546,5062,656],{"class":619},[546,5064,660],{"class":659},[546,5066,5067],{"class":627}," config ",[546,5069,774],{"class":623},[546,5071,790],{"class":623},[546,5073,5074,5077,5079,5081,5083,5086,5088,5091],{"class":548,"line":839},[546,5075,5076],{"class":702},"  matcher",[546,5078,706],{"class":623},[546,5080,2161],{"class":627},[546,5082,714],{"class":623},[546,5084,5085],{"class":555},"\u002Fapi\u002F:path*",[546,5087,714],{"class":623},[546,5089,5090],{"class":627},"]",[546,5092,717],{"class":623},[546,5094,5095],{"class":548,"line":873},[546,5096,1289],{"class":623},[898,5098,5099,5100,5103,5104,5106,5107,5109],{"color":900,"icon":13},"Older versions of Next.js use ",[464,5101,5102],{},"middleware.ts"," instead of ",[464,5105,5014],{},". The evlog middleware works with both, so just import from ",[464,5108,640],{}," regardless.",[524,5111,5113],{"id":5112},"server-actions","Server Actions",[460,5115,5116,5118],{},[464,5117,470],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[536,5120,5123],{"className":609,"code":5121,"filename":5122,"language":612,"meta":542,"style":542},"'use server'\nimport { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const checkout = withEvlog(async (formData: FormData) => {\n  const log = useLogger()\n  log.set({ action: 'checkout', cartId: formData.get('cartId') })\n  \u002F\u002F ...\n})\n","app\u002Factions\u002Fcheckout.ts",[464,5124,5125,5134,5156,5160,5191,5203,5255,5260],{"__ignoreMap":542},[546,5126,5127,5129,5132],{"class":548,"line":549},[546,5128,714],{"class":623},[546,5130,5131],{"class":555},"use server",[546,5133,643],{"class":623},[546,5135,5136,5138,5140,5142,5144,5146,5148,5150,5152,5154],{"class":548,"line":646},[546,5137,620],{"class":619},[546,5139,624],{"class":623},[546,5141,665],{"class":627},[546,5143,668],{"class":623},[546,5145,671],{"class":627},[546,5147,631],{"class":623},[546,5149,634],{"class":619},[546,5151,637],{"class":623},[546,5153,756],{"class":555},[546,5155,643],{"class":623},[546,5157,5158],{"class":548,"line":653},[546,5159,650],{"emptyLinePlaceholder":649},[546,5161,5162,5164,5166,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189],{"class":548,"line":699},[546,5163,656],{"class":619},[546,5165,660],{"class":659},[546,5167,5168],{"class":627}," checkout ",[546,5170,774],{"class":623},[546,5172,665],{"class":690},[546,5174,693],{"class":627},[546,5176,781],{"class":659},[546,5178,1214],{"class":623},[546,5180,4272],{"class":1313},[546,5182,706],{"class":623},[546,5184,4277],{"class":552},[546,5186,1442],{"class":623},[546,5188,787],{"class":659},[546,5190,790],{"class":623},[546,5192,5193,5195,5197,5199,5201],{"class":548,"line":720},[546,5194,795],{"class":659},[546,5196,676],{"class":627},[546,5198,687],{"class":623},[546,5200,671],{"class":690},[546,5202,804],{"class":702},[546,5204,5205,5207,5209,5211,5213,5215,5217,5219,5221,5224,5226,5228,5231,5233,5236,5238,5240,5242,5244,5247,5249,5251,5253],{"class":548,"line":839},[546,5206,809],{"class":627},[546,5208,812],{"class":623},[546,5210,815],{"class":690},[546,5212,693],{"class":702},[546,5214,820],{"class":623},[546,5216,823],{"class":702},[546,5218,706],{"class":623},[546,5220,637],{"class":623},[546,5222,5223],{"class":555},"checkout",[546,5225,714],{"class":623},[546,5227,668],{"class":623},[546,5229,5230],{"class":702}," cartId",[546,5232,706],{"class":623},[546,5234,5235],{"class":627}," formData",[546,5237,812],{"class":623},[546,5239,4365],{"class":690},[546,5241,693],{"class":702},[546,5243,714],{"class":623},[546,5245,5246],{"class":555},"cartId",[546,5248,714],{"class":623},[546,5250,1240],{"class":702},[546,5252,684],{"class":623},[546,5254,725],{"class":702},[546,5256,5257],{"class":548,"line":873},[546,5258,5259],{"class":1705},"  \u002F\u002F ...\n",[546,5261,5262,5264],{"class":548,"line":1065},[546,5263,684],{"class":623},[546,5265,725],{"class":627},[524,5267,5269],{"id":5268},"client-provider","Client Provider",[460,5271,5272,5273,5276],{},"Wrap your root layout with ",[464,5274,5275],{},"EvlogProvider"," to enable client-side logging and transport:",[536,5278,5281],{"className":4221,"code":5279,"filename":5280,"language":4224,"meta":542,"style":542},"import { EvlogProvider } from 'evlog\u002Fnext\u002Fclient'\n\nexport default function Layout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CEvlogProvider service=\"my-app\" transport={{ enabled: true }}>\n          {children}\n        \u003C\u002FEvlogProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n","app\u002Flayout.tsx",[464,5282,5283,5303,5307,5347,5354,5377,5386,5419,5429,5438,5447,5456,5461],{"__ignoreMap":542},[546,5284,5285,5287,5289,5292,5294,5296,5298,5301],{"class":548,"line":549},[546,5286,620],{"class":619},[546,5288,624],{"class":623},[546,5290,5291],{"class":627}," EvlogProvider",[546,5293,631],{"class":623},[546,5295,634],{"class":619},[546,5297,637],{"class":623},[546,5299,5300],{"class":555},"evlog\u002Fnext\u002Fclient",[546,5302,643],{"class":623},[546,5304,5305],{"class":548,"line":646},[546,5306,650],{"emptyLinePlaceholder":649},[546,5308,5309,5311,5314,5316,5319,5322,5325,5328,5330,5332,5334,5337,5339,5342,5345],{"class":548,"line":653},[546,5310,656],{"class":619},[546,5312,5313],{"class":619}," default",[546,5315,1200],{"class":659},[546,5317,5318],{"class":690}," Layout",[546,5320,5321],{"class":623},"({",[546,5323,5324],{"class":1313}," children",[546,5326,5327],{"class":623}," }:",[546,5329,624],{"class":623},[546,5331,5324],{"class":702},[546,5333,706],{"class":623},[546,5335,5336],{"class":552}," React",[546,5338,812],{"class":623},[546,5340,5341],{"class":552},"ReactNode",[546,5343,5344],{"class":623}," })",[546,5346,790],{"class":623},[546,5348,5349,5351],{"class":548,"line":699},[546,5350,842],{"class":619},[546,5352,5353],{"class":702}," (\n",[546,5355,5356,5359,5362,5365,5367,5369,5372,5374],{"class":548,"line":720},[546,5357,5358],{"class":623},"    \u003C",[546,5360,5361],{"class":702},"html",[546,5363,5364],{"class":659}," lang",[546,5366,774],{"class":623},[546,5368,4028],{"class":623},[546,5370,5371],{"class":555},"en",[546,5373,4028],{"class":623},[546,5375,5376],{"class":623},">\n",[546,5378,5379,5382,5384],{"class":548,"line":839},[546,5380,5381],{"class":623},"      \u003C",[546,5383,3120],{"class":702},[546,5385,5376],{"class":623},[546,5387,5388,5391,5393,5395,5397,5399,5401,5403,5406,5409,5412,5414,5416],{"class":548,"line":873},[546,5389,5390],{"class":623},"        \u003C",[546,5392,5275],{"class":552},[546,5394,2524],{"class":659},[546,5396,774],{"class":623},[546,5398,4028],{"class":623},[546,5400,711],{"class":555},[546,5402,4028],{"class":623},[546,5404,5405],{"class":659}," transport",[546,5407,5408],{"class":623},"={{",[546,5410,5411],{"class":702}," enabled",[546,5413,706],{"class":623},[546,5415,1060],{"class":1059},[546,5417,5418],{"class":623}," }}>\n",[546,5420,5421,5424,5427],{"class":548,"line":1065},[546,5422,5423],{"class":623},"          {",[546,5425,5426],{"class":627},"children",[546,5428,1289],{"class":623},[546,5430,5431,5434,5436],{"class":548,"line":1310},[546,5432,5433],{"class":623},"        \u003C\u002F",[546,5435,5275],{"class":552},[546,5437,5376],{"class":623},[546,5439,5440,5443,5445],{"class":548,"line":1340},[546,5441,5442],{"class":623},"      \u003C\u002F",[546,5444,3120],{"class":702},[546,5446,5376],{"class":623},[546,5448,5449,5452,5454],{"class":548,"line":1393},[546,5450,5451],{"class":623},"    \u003C\u002F",[546,5453,5361],{"class":702},[546,5455,5376],{"class":623},[546,5457,5458],{"class":548,"line":1439},[546,5459,5460],{"class":702},"  )\n",[546,5462,5463],{"class":548,"line":1447},[546,5464,1289],{"class":623},[524,5466,66],{"id":5467},"client-logging",[460,5469,3516,5470,5473],{},[464,5471,5472],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[536,5475,5478],{"className":4221,"code":5476,"filename":5477,"language":4224,"meta":542,"style":542},"'use client'\nimport { log, setIdentity, clearIdentity } from 'evlog\u002Fnext\u002Fclient'\n\nexport function Dashboard({ user }: { user: { id: string } }) {\n  \u002F\u002F Set identity once - all subsequent logs include it\n  useEffect(() => {\n    setIdentity({ userId: user.id })\n    return () => clearIdentity()\n  }, [user.id])\n\n  return (\n    \u003Cbutton onClick={() => log.info({ action: 'export_clicked', format: 'csv' })}>\n      Export\n    \u003C\u002Fbutton>\n  )\n}\n","app\u002Fcomponents\u002FDashboard.tsx",[464,5479,5480,5488,5516,5520,5555,5560,5573,5598,5611,5627,5631,5637,5694,5699,5707,5711],{"__ignoreMap":542},[546,5481,5482,5484,5486],{"class":548,"line":549},[546,5483,714],{"class":623},[546,5485,4233],{"class":555},[546,5487,643],{"class":623},[546,5489,5490,5492,5494,5496,5498,5501,5503,5506,5508,5510,5512,5514],{"class":548,"line":646},[546,5491,620],{"class":619},[546,5493,624],{"class":623},[546,5495,676],{"class":627},[546,5497,668],{"class":623},[546,5499,5500],{"class":627}," setIdentity",[546,5502,668],{"class":623},[546,5504,5505],{"class":627}," clearIdentity",[546,5507,631],{"class":623},[546,5509,634],{"class":619},[546,5511,637],{"class":623},[546,5513,5300],{"class":555},[546,5515,643],{"class":623},[546,5517,5518],{"class":548,"line":653},[546,5519,650],{"emptyLinePlaceholder":649},[546,5521,5522,5524,5526,5529,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551,5553],{"class":548,"line":699},[546,5523,656],{"class":619},[546,5525,1200],{"class":659},[546,5527,5528],{"class":690}," Dashboard",[546,5530,5321],{"class":623},[546,5532,2632],{"class":1313},[546,5534,5327],{"class":623},[546,5536,624],{"class":623},[546,5538,2632],{"class":702},[546,5540,706],{"class":623},[546,5542,624],{"class":623},[546,5544,2977],{"class":702},[546,5546,706],{"class":623},[546,5548,1327],{"class":552},[546,5550,631],{"class":623},[546,5552,5344],{"class":623},[546,5554,790],{"class":623},[546,5556,5557],{"class":548,"line":720},[546,5558,5559],{"class":1705},"  \u002F\u002F Set identity once - all subsequent logs include it\n",[546,5561,5562,5565,5567,5569,5571],{"class":548,"line":839},[546,5563,5564],{"class":690},"  useEffect",[546,5566,693],{"class":702},[546,5568,1047],{"class":623},[546,5570,787],{"class":659},[546,5572,790],{"class":623},[546,5574,5575,5578,5580,5582,5585,5587,5589,5591,5594,5596],{"class":548,"line":873},[546,5576,5577],{"class":690},"    setIdentity",[546,5579,693],{"class":702},[546,5581,820],{"class":623},[546,5583,5584],{"class":702}," userId",[546,5586,706],{"class":623},[546,5588,2632],{"class":627},[546,5590,812],{"class":623},[546,5592,5593],{"class":627},"id",[546,5595,631],{"class":623},[546,5597,725],{"class":702},[546,5599,5600,5603,5605,5607,5609],{"class":548,"line":1065},[546,5601,5602],{"class":619},"    return",[546,5604,784],{"class":623},[546,5606,787],{"class":659},[546,5608,5505],{"class":690},[546,5610,804],{"class":702},[546,5612,5613,5616,5618,5620,5622,5624],{"class":548,"line":1310},[546,5614,5615],{"class":623},"  },",[546,5617,2161],{"class":702},[546,5619,2647],{"class":627},[546,5621,812],{"class":623},[546,5623,5593],{"class":627},[546,5625,5626],{"class":702},"])\n",[546,5628,5629],{"class":548,"line":1340},[546,5630,650],{"emptyLinePlaceholder":649},[546,5632,5633,5635],{"class":548,"line":1393},[546,5634,842],{"class":619},[546,5636,5353],{"class":702},[546,5638,5639,5641,5644,5647,5650,5652,5654,5656,5658,5660,5662,5664,5666,5668,5671,5673,5675,5678,5680,5682,5685,5687,5689,5691],{"class":548,"line":1439},[546,5640,5358],{"class":623},[546,5642,5643],{"class":702},"button",[546,5645,5646],{"class":659}," onClick",[546,5648,5649],{"class":623},"={()",[546,5651,787],{"class":659},[546,5653,676],{"class":627},[546,5655,812],{"class":623},[546,5657,900],{"class":690},[546,5659,693],{"class":627},[546,5661,820],{"class":623},[546,5663,823],{"class":702},[546,5665,706],{"class":623},[546,5667,637],{"class":623},[546,5669,5670],{"class":555},"export_clicked",[546,5672,714],{"class":623},[546,5674,668],{"class":623},[546,5676,5677],{"class":702}," format",[546,5679,706],{"class":623},[546,5681,637],{"class":623},[546,5683,5684],{"class":555},"csv",[546,5686,714],{"class":623},[546,5688,631],{"class":623},[546,5690,1442],{"class":627},[546,5692,5693],{"class":623},"}>\n",[546,5695,5696],{"class":548,"line":1447},[546,5697,5698],{"class":627},"      Export\n",[546,5700,5701,5703,5705],{"class":548,"line":1476},[546,5702,5451],{"class":623},[546,5704,5643],{"class":702},[546,5706,5376],{"class":623},[546,5708,5709],{"class":548,"line":1503},[546,5710,5460],{"class":702},[546,5712,5713],{"class":548,"line":1527},[546,5714,1289],{"class":623},[524,5716,5718],{"id":5717},"http-drain","HTTP drain",[460,5720,5721,5722,5724],{},"For advanced use cases, send structured ",[464,5723,2198],{}," events directly from the browser to a custom endpoint:",[536,5726,5729],{"className":609,"code":5727,"filename":5728,"language":612,"meta":542,"style":542},"import { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: '\u002Fapi\u002Fevlog\u002Fhttp-ingest' },\n  pipeline: { batch: { size: 10, intervalMs: 5000 } },\n})\n\ndrain(drainEvent)\nawait drain.flush()\n","lib\u002Fhttp-drain.ts",[464,5730,5731,5751,5755,5769,5791,5824,5830,5834,5841],{"__ignoreMap":542},[546,5732,5733,5735,5737,5740,5742,5744,5746,5749],{"class":548,"line":549},[546,5734,620],{"class":619},[546,5736,624],{"class":623},[546,5738,5739],{"class":627}," createHttpLogDrain",[546,5741,631],{"class":623},[546,5743,634],{"class":619},[546,5745,637],{"class":623},[546,5747,5748],{"class":555},"evlog\u002Fhttp",[546,5750,643],{"class":623},[546,5752,5753],{"class":548,"line":646},[546,5754,650],{"emptyLinePlaceholder":649},[546,5756,5757,5759,5761,5763,5765,5767],{"class":548,"line":653},[546,5758,1614],{"class":659},[546,5760,2252],{"class":627},[546,5762,774],{"class":623},[546,5764,5739],{"class":690},[546,5766,693],{"class":627},[546,5768,696],{"class":623},[546,5770,5771,5773,5775,5777,5780,5782,5784,5787,5789],{"class":548,"line":699},[546,5772,1040],{"class":702},[546,5774,706],{"class":623},[546,5776,624],{"class":623},[546,5778,5779],{"class":702}," endpoint",[546,5781,706],{"class":623},[546,5783,637],{"class":623},[546,5785,5786],{"class":555},"\u002Fapi\u002Fevlog\u002Fhttp-ingest",[546,5788,714],{"class":623},[546,5790,1390],{"class":623},[546,5792,5793,5796,5798,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820,5822],{"class":548,"line":720},[546,5794,5795],{"class":702},"  pipeline",[546,5797,706],{"class":623},[546,5799,624],{"class":623},[546,5801,2207],{"class":702},[546,5803,706],{"class":623},[546,5805,624],{"class":623},[546,5807,2214],{"class":702},[546,5809,706],{"class":623},[546,5811,2399],{"class":2219},[546,5813,668],{"class":623},[546,5815,2225],{"class":702},[546,5817,706],{"class":623},[546,5819,2230],{"class":2219},[546,5821,631],{"class":623},[546,5823,1390],{"class":623},[546,5825,5826,5828],{"class":548,"line":839},[546,5827,684],{"class":623},[546,5829,725],{"class":627},[546,5831,5832],{"class":548,"line":873},[546,5833,650],{"emptyLinePlaceholder":649},[546,5835,5836,5838],{"class":548,"line":1065},[546,5837,942],{"class":690},[546,5839,5840],{"class":627},"(drainEvent)\n",[546,5842,5843,5846,5849,5851,5854],{"class":548,"line":1310},[546,5844,5845],{"class":619},"await",[546,5847,5848],{"class":627}," drain",[546,5850,812],{"class":623},[546,5852,5853],{"class":690},"flush",[546,5855,804],{"class":627},[460,5857,5858],{},"The server endpoint receives batched events:",[536,5860,5863],{"className":609,"code":5861,"filename":5862,"language":612,"meta":542,"style":542},"export async function POST(request: Request) {\n  const events = await request.json()\n  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n  return new Response(null, { status: 204 })\n}\n","app\u002Fapi\u002Fevlog\u002Fhttp-ingest\u002Froute.ts",[464,5864,5865,5888,5907,5912,5939],{"__ignoreMap":542},[546,5866,5867,5869,5871,5873,5876,5878,5880,5882,5884,5886],{"class":548,"line":549},[546,5868,656],{"class":619},[546,5870,1197],{"class":659},[546,5872,1200],{"class":659},[546,5874,5875],{"class":690}," POST",[546,5877,693],{"class":623},[546,5879,2902],{"class":1313},[546,5881,706],{"class":623},[546,5883,2907],{"class":552},[546,5885,1442],{"class":623},[546,5887,790],{"class":623},[546,5889,5890,5892,5895,5897,5899,5901,5903,5905],{"class":548,"line":646},[546,5891,795],{"class":659},[546,5893,5894],{"class":627}," events",[546,5896,687],{"class":623},[546,5898,1258],{"class":619},[546,5900,1517],{"class":627},[546,5902,812],{"class":623},[546,5904,850],{"class":690},[546,5906,804],{"class":702},[546,5908,5909],{"class":548,"line":653},[546,5910,5911],{"class":1705},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[546,5913,5914,5916,5919,5921,5923,5926,5928,5930,5932,5935,5937],{"class":548,"line":699},[546,5915,842],{"class":619},[546,5917,5918],{"class":623}," new",[546,5920,845],{"class":690},[546,5922,693],{"class":702},[546,5924,5925],{"class":623},"null,",[546,5927,624],{"class":623},[546,5929,2421],{"class":702},[546,5931,706],{"class":623},[546,5933,5934],{"class":2219}," 204",[546,5936,631],{"class":623},[546,5938,725],{"class":702},[546,5940,5941],{"class":548,"line":720},[546,5942,1289],{"class":623},[524,5944,5946],{"id":5945},"run-locally","Run Locally",[536,5948,5951],{"className":538,"code":5949,"filename":5950,"language":541,"meta":542,"style":542},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\u002Fexamples\u002Fnextjs\npnpm install\npnpm run dev\n","Terminal",[464,5952,5953,5964,5972,5979],{"__ignoreMap":542},[546,5954,5955,5958,5961],{"class":548,"line":549},[546,5956,5957],{"class":552},"git",[546,5959,5960],{"class":555}," clone",[546,5962,5963],{"class":555}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[546,5965,5966,5969],{"class":548,"line":646},[546,5967,5968],{"class":690},"cd",[546,5970,5971],{"class":555}," evlog\u002Fexamples\u002Fnextjs\n",[546,5973,5974,5976],{"class":548,"line":653},[546,5975,540],{"class":552},[546,5977,5978],{"class":555}," install\n",[546,5980,5981,5983,5986],{"class":548,"line":699},[546,5982,540],{"class":552},[546,5984,5985],{"class":555}," run",[546,5987,5988],{"class":555}," dev\n",[460,5990,5991,5992,5996],{},"Open ",[513,5993,5994],{"href":5994,"rel":5995},"http:\u002F\u002Flocalhost:3000",[517]," to explore the example.",[5998,5999,6000],"card-group",{},[6001,6002,6006],"card",{"icon":6003,"title":6004,"to":6005},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fnextjs","Browse the complete Next.js example source on GitHub.",[524,6008,6010],{"id":6009},"next-steps","Next Steps",[460,6012,6013,6014,6016],{},"Deepen your ",[909,6015,216],{}," integration:",[485,6018,6019,6024,6029,6034],{},[488,6020,6021,6023],{},[513,6022,51],{"href":52},": Design comprehensive events with context layering",[488,6025,6026,6028],{},[513,6027,353],{"href":358},": Send logs to Axiom, Sentry, PostHog, and more",[488,6030,6031,6033],{},[513,6032,175],{"href":176},": Control log volume with head and tail sampling",[488,6035,6036,6038,6039,1910,6041,3527,6043,6045],{},[513,6037,56],{"href":57},": Throw errors with ",[464,6040,3523],{},[464,6042,3526],{},[464,6044,3530],{}," fields",[6047,6048,6049],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":542,"searchDepth":646,"depth":646,"links":6051},[6052,6057,6063,6064,6065,6067,6070,6071,6072,6073,6074,6075,6076,6077,6078],{"id":526,"depth":646,"text":20,"children":6053},[6054,6055,6056],{"id":530,"depth":653,"text":531},{"id":605,"depth":653,"text":606},{"id":728,"depth":653,"text":729},{"id":880,"depth":646,"text":881,"children":6058},[6059,6060,6061,6062],{"id":945,"depth":653,"text":946},{"id":1072,"depth":653,"text":1073},{"id":1547,"depth":653,"text":1548},{"id":1945,"depth":653,"text":170},{"id":2022,"depth":646,"text":2023},{"id":2845,"depth":646,"text":51},{"id":3311,"depth":646,"text":6066},"Background work (log.fork)",{"id":3512,"depth":646,"text":3513,"children":6068},[6069],{"id":4204,"depth":653,"text":4205},{"id":4534,"depth":646,"text":170},{"id":4760,"depth":646,"text":4761},{"id":4997,"depth":646,"text":114},{"id":5112,"depth":646,"text":5113},{"id":5268,"depth":646,"text":5269},{"id":5467,"depth":646,"text":66},{"id":5717,"depth":646,"text":5718},{"id":5945,"depth":646,"text":5946},{"id":6009,"depth":646,"text":6010},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.","md",[6082],{"label":6004,"icon":6003,"to":6005,"color":6083,"variant":6084},"neutral","subtle",{},{"title":216,"icon":219},{"title":216,"description":6079},"-61UzY5v1Ku5j5igK7o-bpDv1eJpRmnpzWB2aYkDU9Q",[6090,6092],{"title":211,"path":212,"stem":213,"description":6091,"icon":214,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, tail sampling, and client transport in Nuxt applications.",{"title":221,"path":222,"stem":223,"description":6093,"icon":224,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.",1778340164382]