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