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