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