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