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