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