[{"data":1,"prerenderedAt":4432},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nextjs":228,"-frameworks-nextjs-surround":4427},[4,30,110,149,198,214],{"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},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,139,144],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":131,"path":132,"stem":133,"icon":134},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":136,"path":137,"stem":138,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":140,"path":141,"stem":142,"icon":143},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":145,"path":146,"stem":147,"icon":148},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":150,"path":151,"stem":152,"children":153,"page":29},"Adapters","\u002Fadapters","4.adapters",[154,158,163,168,173,178,183,188,193],{"title":36,"path":155,"stem":156,"icon":157},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":159,"path":160,"stem":161,"icon":162},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":164,"path":165,"stem":166,"icon":167},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":169,"path":170,"stem":171,"icon":172},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":174,"path":175,"stem":176,"icon":177},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":179,"path":180,"stem":181,"icon":182},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":184,"path":185,"stem":186,"icon":187},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F7.custom","i-lucide-code",{"title":189,"path":190,"stem":191,"icon":192},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F8.pipeline","i-lucide-workflow",{"title":194,"path":195,"stem":196,"icon":197},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F9.browser","i-lucide-globe",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[203,206,210],{"title":36,"path":204,"stem":205,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":207,"path":208,"stem":209,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":211,"path":212,"stem":213,"icon":187},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":215,"path":216,"stem":217,"children":218,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[219,223],{"title":36,"path":220,"stem":221,"icon":222},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":224,"path":225,"stem":226,"icon":227},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":229,"title":46,"body":230,"description":4417,"extension":4418,"links":4419,"meta":4423,"navigation":4424,"path":47,"seo":4425,"stem":48,"__hash__":4426},"docs\u002F2.frameworks\u002F02.nextjs.md",{"type":231,"value":232,"toc":4397},"minimark",[233,250,254,259,284,288,407,411,559,563,569,1412,1415,1418,1799,1802,1882,1886,1905,2376,2385,2511,2514,2581,2585,2598,2900,2913,2917,2923,3138,3142,3145,3370,3375,3379,3393,3479,3494,3498,3503,3650,3654,3661,3849,3852,3858,4100,4104,4110,4240,4243,4328,4332,4373,4383,4393],[234,235,236,237,241,242,245,246,249],"p",{},"evlog integrates with Next.js App Router via a ",[238,239,240],"code",{},"createEvlog()"," factory that provides ",[238,243,244],{},"withEvlog()"," handler wrapper, ",[238,247,248],{},"useLogger()",", and typed exports. One file, zero global state.",[251,252,20],"h2",{"id":253},"quick-start",[255,256,258],"h3",{"id":257},"_1-install","1. Install",[260,261,266],"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash","",[238,267,268],{"__ignoreMap":265},[269,270,273,277,281],"span",{"class":271,"line":272},"line",1,[269,274,276],{"class":275},"sBMFI","bun",[269,278,280],{"class":279},"sfazB"," add",[269,282,283],{"class":279}," evlog\n",[255,285,287],{"id":286},"_2-create-your-evlog-instance","2. Create your evlog instance",[260,289,294],{"className":290,"code":291,"filename":292,"language":293,"meta":265,"style":265},"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",[238,295,296,325,332,378,399],{"__ignoreMap":265},[269,297,298,302,306,310,313,316,319,322],{"class":271,"line":272},[269,299,301],{"class":300},"s7zQu","import",[269,303,305],{"class":304},"sMK4o"," {",[269,307,309],{"class":308},"sTEyZ"," createEvlog",[269,311,312],{"class":304}," }",[269,314,315],{"class":300}," from",[269,317,318],{"class":304}," '",[269,320,321],{"class":279},"evlog\u002Fnext",[269,323,324],{"class":304},"'\n",[269,326,328],{"class":271,"line":327},2,[269,329,331],{"emptyLinePlaceholder":330},true,"\n",[269,333,335,338,342,344,347,350,353,355,358,360,363,366,369,372,375],{"class":271,"line":334},3,[269,336,337],{"class":300},"export",[269,339,341],{"class":340},"spNyl"," const",[269,343,305],{"class":304},[269,345,346],{"class":308}," withEvlog",[269,348,349],{"class":304},",",[269,351,352],{"class":308}," useLogger",[269,354,349],{"class":304},[269,356,357],{"class":308}," log",[269,359,349],{"class":304},[269,361,362],{"class":308}," createError ",[269,364,365],{"class":304},"}",[269,367,368],{"class":304}," =",[269,370,309],{"class":371},"s2Zo4",[269,373,374],{"class":308},"(",[269,376,377],{"class":304},"{\n",[269,379,381,385,388,390,393,396],{"class":271,"line":380},4,[269,382,384],{"class":383},"swJcz","  service",[269,386,387],{"class":304},":",[269,389,318],{"class":304},[269,391,392],{"class":279},"my-app",[269,394,395],{"class":304},"'",[269,397,398],{"class":304},",\n",[269,400,402,404],{"class":271,"line":401},5,[269,403,365],{"class":304},[269,405,406],{"class":308},")\n",[255,408,410],{"id":409},"_3-wrap-a-route-handler","3. Wrap a route handler",[260,412,415],{"className":290,"code":413,"filename":414,"language":293,"meta":265,"style":265},"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",[238,416,417,440,444,472,486,518,552],{"__ignoreMap":265},[269,418,419,421,423,425,427,429,431,433,435,438],{"class":271,"line":272},[269,420,301],{"class":300},[269,422,305],{"class":304},[269,424,346],{"class":308},[269,426,349],{"class":304},[269,428,352],{"class":308},[269,430,312],{"class":304},[269,432,315],{"class":300},[269,434,318],{"class":304},[269,436,437],{"class":279},"@\u002Flib\u002Fevlog",[269,439,324],{"class":304},[269,441,442],{"class":271,"line":327},[269,443,331],{"emptyLinePlaceholder":330},[269,445,446,448,450,453,456,458,460,463,466,469],{"class":271,"line":334},[269,447,337],{"class":300},[269,449,341],{"class":340},[269,451,452],{"class":308}," GET ",[269,454,455],{"class":304},"=",[269,457,346],{"class":371},[269,459,374],{"class":308},[269,461,462],{"class":340},"async",[269,464,465],{"class":304}," ()",[269,467,468],{"class":340}," =>",[269,470,471],{"class":304}," {\n",[269,473,474,477,479,481,483],{"class":271,"line":380},[269,475,476],{"class":340},"  const",[269,478,357],{"class":308},[269,480,368],{"class":304},[269,482,352],{"class":371},[269,484,485],{"class":383},"()\n",[269,487,488,491,494,497,499,502,505,507,509,512,514,516],{"class":271,"line":401},[269,489,490],{"class":308},"  log",[269,492,493],{"class":304},".",[269,495,496],{"class":371},"set",[269,498,374],{"class":383},[269,500,501],{"class":304},"{",[269,503,504],{"class":383}," action",[269,506,387],{"class":304},[269,508,318],{"class":304},[269,510,511],{"class":279},"hello",[269,513,395],{"class":304},[269,515,312],{"class":304},[269,517,406],{"class":383},[269,519,521,524,527,529,532,534,536,539,541,543,546,548,550],{"class":271,"line":520},6,[269,522,523],{"class":300},"  return",[269,525,526],{"class":308}," Response",[269,528,493],{"class":304},[269,530,531],{"class":371},"json",[269,533,374],{"class":383},[269,535,501],{"class":304},[269,537,538],{"class":383}," message",[269,540,387],{"class":304},[269,542,318],{"class":304},[269,544,545],{"class":279},"Hello!",[269,547,395],{"class":304},[269,549,312],{"class":304},[269,551,406],{"class":383},[269,553,555,557],{"class":271,"line":554},7,[269,556,365],{"class":304},[269,558,406],{"class":308},[251,560,562],{"id":561},"production-configuration","Production Configuration",[234,564,565,566,568],{},"A real-world ",[238,567,292],{}," with enrichers, batched drain, tail sampling, and route-based service names:",[260,570,572],{"className":290,"code":571,"filename":292,"language":293,"meta":265,"style":265},"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",[238,573,574,597,615,640,660,680,684,690,717,722,728,785,790,796,818,835,859,867,872,905,920,925,931,941,962,973,993,1011,1033,1041,1047,1052,1058,1068,1097,1124,1151,1156,1161,1167,1189,1235,1267,1272,1277,1283,1301,1331,1360,1387,1392,1397,1405],{"__ignoreMap":265},[269,575,576,578,581,583,586,588,590,592,595],{"class":271,"line":272},[269,577,301],{"class":300},[269,579,580],{"class":300}," type",[269,582,305],{"class":304},[269,584,585],{"class":308}," DrainContext",[269,587,312],{"class":304},[269,589,315],{"class":300},[269,591,318],{"class":304},[269,593,594],{"class":279},"evlog",[269,596,324],{"class":304},[269,598,599,601,603,605,607,609,611,613],{"class":271,"line":327},[269,600,301],{"class":300},[269,602,305],{"class":304},[269,604,309],{"class":308},[269,606,312],{"class":304},[269,608,315],{"class":300},[269,610,318],{"class":304},[269,612,321],{"class":279},[269,614,324],{"class":304},[269,616,617,619,621,624,626,629,631,633,635,638],{"class":271,"line":334},[269,618,301],{"class":300},[269,620,305],{"class":304},[269,622,623],{"class":308}," createUserAgentEnricher",[269,625,349],{"class":304},[269,627,628],{"class":308}," createRequestSizeEnricher",[269,630,312],{"class":304},[269,632,315],{"class":300},[269,634,318],{"class":304},[269,636,637],{"class":279},"evlog\u002Fenrichers",[269,639,324],{"class":304},[269,641,642,644,646,649,651,653,655,658],{"class":271,"line":380},[269,643,301],{"class":300},[269,645,305],{"class":304},[269,647,648],{"class":308}," createAxiomDrain",[269,650,312],{"class":304},[269,652,315],{"class":300},[269,654,318],{"class":304},[269,656,657],{"class":279},"evlog\u002Faxiom",[269,659,324],{"class":304},[269,661,662,664,666,669,671,673,675,678],{"class":271,"line":401},[269,663,301],{"class":300},[269,665,305],{"class":304},[269,667,668],{"class":308}," createDrainPipeline",[269,670,312],{"class":304},[269,672,315],{"class":300},[269,674,318],{"class":304},[269,676,677],{"class":279},"evlog\u002Fpipeline",[269,679,324],{"class":304},[269,681,682],{"class":271,"line":520},[269,683,331],{"emptyLinePlaceholder":330},[269,685,686],{"class":271,"line":554},[269,687,689],{"class":688},"sHwdD","\u002F\u002F 1. Enrichers — add derived context to every event\n",[269,691,693,696,699,701,704,707,710,712,714],{"class":271,"line":692},8,[269,694,695],{"class":340},"const",[269,697,698],{"class":308}," enrichers ",[269,700,455],{"class":304},[269,702,703],{"class":308}," [",[269,705,706],{"class":371},"createUserAgentEnricher",[269,708,709],{"class":308},"()",[269,711,349],{"class":304},[269,713,628],{"class":371},[269,715,716],{"class":308},"()]\n",[269,718,720],{"class":271,"line":719},9,[269,721,331],{"emptyLinePlaceholder":330},[269,723,725],{"class":271,"line":724},10,[269,726,727],{"class":688},"\u002F\u002F 2. Pipeline — batch events before sending\n",[269,729,731,733,736,738,740,743,746,749,751,753,756,758,760,763,765,769,771,774,776,779,781,783],{"class":271,"line":730},11,[269,732,695],{"class":340},[269,734,735],{"class":308}," pipeline ",[269,737,455],{"class":304},[269,739,668],{"class":371},[269,741,742],{"class":304},"\u003C",[269,744,745],{"class":275},"DrainContext",[269,747,748],{"class":304},">",[269,750,374],{"class":308},[269,752,501],{"class":304},[269,754,755],{"class":383}," batch",[269,757,387],{"class":304},[269,759,305],{"class":304},[269,761,762],{"class":383}," size",[269,764,387],{"class":304},[269,766,768],{"class":767},"sbssI"," 50",[269,770,349],{"class":304},[269,772,773],{"class":383}," intervalMs",[269,775,387],{"class":304},[269,777,778],{"class":767}," 5000",[269,780,312],{"class":304},[269,782,312],{"class":304},[269,784,406],{"class":308},[269,786,788],{"class":271,"line":787},12,[269,789,331],{"emptyLinePlaceholder":330},[269,791,793],{"class":271,"line":792},13,[269,794,795],{"class":688},"\u002F\u002F 3. Drain — send batched events to Axiom\n",[269,797,799,801,804,806,809,811,814,816],{"class":271,"line":798},14,[269,800,695],{"class":340},[269,802,803],{"class":308}," drain ",[269,805,455],{"class":304},[269,807,808],{"class":371}," pipeline",[269,810,374],{"class":308},[269,812,813],{"class":371},"createAxiomDrain",[269,815,374],{"class":308},[269,817,377],{"class":304},[269,819,821,824,826,828,831,833],{"class":271,"line":820},15,[269,822,823],{"class":383},"  dataset",[269,825,387],{"class":304},[269,827,318],{"class":304},[269,829,830],{"class":279},"logs",[269,832,395],{"class":304},[269,834,398],{"class":304},[269,836,838,841,843,846,848,851,853,856],{"class":271,"line":837},16,[269,839,840],{"class":383},"  token",[269,842,387],{"class":304},[269,844,845],{"class":308}," process",[269,847,493],{"class":304},[269,849,850],{"class":308},"env",[269,852,493],{"class":304},[269,854,855],{"class":308},"AXIOM_TOKEN",[269,857,858],{"class":304},"!,\n",[269,860,862,864],{"class":271,"line":861},17,[269,863,365],{"class":304},[269,865,866],{"class":308},"))\n",[269,868,870],{"class":271,"line":869},18,[269,871,331],{"emptyLinePlaceholder":330},[269,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903],{"class":271,"line":874},19,[269,876,337],{"class":300},[269,878,341],{"class":340},[269,880,305],{"class":304},[269,882,346],{"class":308},[269,884,349],{"class":304},[269,886,352],{"class":308},[269,888,349],{"class":304},[269,890,357],{"class":308},[269,892,349],{"class":304},[269,894,362],{"class":308},[269,896,365],{"class":304},[269,898,368],{"class":304},[269,900,309],{"class":371},[269,902,374],{"class":308},[269,904,377],{"class":304},[269,906,908,910,912,914,916,918],{"class":271,"line":907},20,[269,909,384],{"class":383},[269,911,387],{"class":304},[269,913,318],{"class":304},[269,915,392],{"class":279},[269,917,395],{"class":304},[269,919,398],{"class":304},[269,921,923],{"class":271,"line":922},21,[269,924,331],{"emptyLinePlaceholder":330},[269,926,928],{"class":271,"line":927},22,[269,929,930],{"class":688},"  \u002F\u002F 4. Head sampling — keep 10% of info logs\n",[269,932,934,937,939],{"class":271,"line":933},23,[269,935,936],{"class":383},"  sampling",[269,938,387],{"class":304},[269,940,471],{"class":304},[269,942,944,947,949,951,954,956,959],{"class":271,"line":943},24,[269,945,946],{"class":383},"    rates",[269,948,387],{"class":304},[269,950,305],{"class":304},[269,952,953],{"class":383}," info",[269,955,387],{"class":304},[269,957,958],{"class":767}," 10",[269,960,961],{"class":304}," },\n",[269,963,965,968,970],{"class":271,"line":964},25,[269,966,967],{"class":383},"    keep",[269,969,387],{"class":304},[269,971,972],{"class":308}," [\n",[269,974,976,979,982,984,987,990],{"class":271,"line":975},26,[269,977,978],{"class":304},"      {",[269,980,981],{"class":383}," status",[269,983,387],{"class":304},[269,985,986],{"class":767}," 400",[269,988,989],{"class":304}," },",[269,991,992],{"class":688},"              \u002F\u002F Always keep errors\n",[269,994,996,998,1001,1003,1006,1008],{"class":271,"line":995},27,[269,997,978],{"class":304},[269,999,1000],{"class":383}," duration",[269,1002,387],{"class":304},[269,1004,1005],{"class":767}," 1000",[269,1007,989],{"class":304},[269,1009,1010],{"class":688},"           \u002F\u002F Always keep slow requests\n",[269,1012,1014,1016,1019,1021,1023,1026,1028,1030],{"class":271,"line":1013},28,[269,1015,978],{"class":304},[269,1017,1018],{"class":383}," path",[269,1020,387],{"class":304},[269,1022,318],{"class":304},[269,1024,1025],{"class":279},"\u002Fapi\u002Fcritical\u002F**",[269,1027,395],{"class":304},[269,1029,989],{"class":304},[269,1031,1032],{"class":688}," \u002F\u002F Always keep critical paths\n",[269,1034,1036,1039],{"class":271,"line":1035},29,[269,1037,1038],{"class":308},"    ]",[269,1040,398],{"class":304},[269,1042,1044],{"class":271,"line":1043},30,[269,1045,1046],{"class":304},"  },\n",[269,1048,1050],{"class":271,"line":1049},31,[269,1051,331],{"emptyLinePlaceholder":330},[269,1053,1055],{"class":271,"line":1054},32,[269,1056,1057],{"class":688},"  \u002F\u002F 5. Route-based service names\n",[269,1059,1061,1064,1066],{"class":271,"line":1060},33,[269,1062,1063],{"class":383},"  routes",[269,1065,387],{"class":304},[269,1067,471],{"class":304},[269,1069,1071,1074,1077,1079,1081,1083,1086,1088,1090,1093,1095],{"class":271,"line":1070},34,[269,1072,1073],{"class":304},"    '",[269,1075,1076],{"class":383},"\u002Fapi\u002Fauth\u002F**",[269,1078,395],{"class":304},[269,1080,387],{"class":304},[269,1082,305],{"class":304},[269,1084,1085],{"class":383}," service",[269,1087,387],{"class":304},[269,1089,318],{"class":304},[269,1091,1092],{"class":279},"auth-service",[269,1094,395],{"class":304},[269,1096,961],{"class":304},[269,1098,1100,1102,1105,1107,1109,1111,1113,1115,1117,1120,1122],{"class":271,"line":1099},35,[269,1101,1073],{"class":304},[269,1103,1104],{"class":383},"\u002Fapi\u002Fpayment\u002F**",[269,1106,395],{"class":304},[269,1108,387],{"class":304},[269,1110,305],{"class":304},[269,1112,1085],{"class":383},[269,1114,387],{"class":304},[269,1116,318],{"class":304},[269,1118,1119],{"class":279},"payment-service",[269,1121,395],{"class":304},[269,1123,961],{"class":304},[269,1125,1127,1129,1132,1134,1136,1138,1140,1142,1144,1147,1149],{"class":271,"line":1126},36,[269,1128,1073],{"class":304},[269,1130,1131],{"class":383},"\u002Fapi\u002Fbooking\u002F**",[269,1133,395],{"class":304},[269,1135,387],{"class":304},[269,1137,305],{"class":304},[269,1139,1085],{"class":383},[269,1141,387],{"class":304},[269,1143,318],{"class":304},[269,1145,1146],{"class":279},"booking-service",[269,1148,395],{"class":304},[269,1150,961],{"class":304},[269,1152,1154],{"class":271,"line":1153},37,[269,1155,1046],{"class":304},[269,1157,1159],{"class":271,"line":1158},38,[269,1160,331],{"emptyLinePlaceholder":330},[269,1162,1164],{"class":271,"line":1163},39,[269,1165,1166],{"class":688},"  \u002F\u002F 6. Custom tail sampling — business logic\n",[269,1168,1170,1173,1175,1178,1182,1185,1187],{"class":271,"line":1169},40,[269,1171,1172],{"class":371},"  keep",[269,1174,387],{"class":304},[269,1176,1177],{"class":304}," (",[269,1179,1181],{"class":1180},"sHdIc","ctx",[269,1183,1184],{"class":304},")",[269,1186,468],{"class":340},[269,1188,471],{"class":304},[269,1190,1192,1195,1198,1200,1203,1205,1208,1210,1213,1216,1218,1221,1224,1227,1229,1232],{"class":271,"line":1191},41,[269,1193,1194],{"class":340},"    const",[269,1196,1197],{"class":308}," user",[269,1199,368],{"class":304},[269,1201,1202],{"class":308}," ctx",[269,1204,493],{"class":304},[269,1206,1207],{"class":308},"context",[269,1209,493],{"class":304},[269,1211,1212],{"class":308},"user",[269,1214,1215],{"class":300}," as",[269,1217,305],{"class":304},[269,1219,1220],{"class":383}," premium",[269,1222,1223],{"class":304},"?:",[269,1225,1226],{"class":275}," boolean",[269,1228,312],{"class":304},[269,1230,1231],{"class":304}," |",[269,1233,1234],{"class":275}," undefined\n",[269,1236,1238,1241,1243,1245,1248,1251,1254,1256,1258,1261,1263],{"class":271,"line":1237},42,[269,1239,1240],{"class":300},"    if",[269,1242,1177],{"class":383},[269,1244,1212],{"class":308},[269,1246,1247],{"class":304},"?.",[269,1249,1250],{"class":308},"premium",[269,1252,1253],{"class":383},") ",[269,1255,1181],{"class":308},[269,1257,493],{"class":304},[269,1259,1260],{"class":308},"shouldKeep",[269,1262,368],{"class":304},[269,1264,1266],{"class":1265},"sfNiH"," true\n",[269,1268,1270],{"class":271,"line":1269},43,[269,1271,1046],{"class":304},[269,1273,1275],{"class":271,"line":1274},44,[269,1276,331],{"emptyLinePlaceholder":330},[269,1278,1280],{"class":271,"line":1279},45,[269,1281,1282],{"class":688},"  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n",[269,1284,1286,1289,1291,1293,1295,1297,1299],{"class":271,"line":1285},46,[269,1287,1288],{"class":371},"  enrich",[269,1290,387],{"class":304},[269,1292,1177],{"class":304},[269,1294,1181],{"class":1180},[269,1296,1184],{"class":304},[269,1298,468],{"class":340},[269,1300,471],{"class":304},[269,1302,1304,1307,1309,1311,1314,1317,1320,1322,1325,1327,1329],{"class":271,"line":1303},47,[269,1305,1306],{"class":300},"    for",[269,1308,1177],{"class":383},[269,1310,695],{"class":340},[269,1312,1313],{"class":308}," enricher",[269,1315,1316],{"class":304}," of",[269,1318,1319],{"class":308}," enrichers",[269,1321,1253],{"class":383},[269,1323,1324],{"class":371},"enricher",[269,1326,374],{"class":383},[269,1328,1181],{"class":308},[269,1330,406],{"class":383},[269,1332,1334,1337,1339,1342,1344,1347,1349,1351,1353,1355,1357],{"class":271,"line":1333},48,[269,1335,1336],{"class":308},"    ctx",[269,1338,493],{"class":304},[269,1340,1341],{"class":308},"event",[269,1343,493],{"class":304},[269,1345,1346],{"class":308},"deploymentId",[269,1348,368],{"class":304},[269,1350,845],{"class":308},[269,1352,493],{"class":304},[269,1354,850],{"class":308},[269,1356,493],{"class":304},[269,1358,1359],{"class":308},"VERCEL_DEPLOYMENT_ID\n",[269,1361,1363,1365,1367,1369,1371,1374,1376,1378,1380,1382,1384],{"class":271,"line":1362},49,[269,1364,1336],{"class":308},[269,1366,493],{"class":304},[269,1368,1341],{"class":308},[269,1370,493],{"class":304},[269,1372,1373],{"class":308},"region",[269,1375,368],{"class":304},[269,1377,845],{"class":308},[269,1379,493],{"class":304},[269,1381,850],{"class":308},[269,1383,493],{"class":304},[269,1385,1386],{"class":308},"VERCEL_REGION\n",[269,1388,1390],{"class":271,"line":1389},50,[269,1391,1046],{"class":304},[269,1393,1395],{"class":271,"line":1394},51,[269,1396,331],{"emptyLinePlaceholder":330},[269,1398,1400,1403],{"class":271,"line":1399},52,[269,1401,1402],{"class":308},"  drain",[269,1404,398],{"class":304},[269,1406,1408,1410],{"class":271,"line":1407},53,[269,1409,365],{"class":304},[269,1411,406],{"class":308},[251,1413,121],{"id":1414},"wide-events",[234,1416,1417],{},"Build up context progressively through your handler. One request = one wide event:",[260,1419,1422],{"className":290,"code":1420,"filename":1421,"language":293,"meta":265,"style":265},"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",[238,1423,1424,1446,1450,1483,1495,1516,1520,1525,1537,1574,1581,1585,1590,1602,1658,1664,1668,1673,1694,1706,1743,1749,1753,1793],{"__ignoreMap":265},[269,1425,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444],{"class":271,"line":272},[269,1427,301],{"class":300},[269,1429,305],{"class":304},[269,1431,346],{"class":308},[269,1433,349],{"class":304},[269,1435,352],{"class":308},[269,1437,312],{"class":304},[269,1439,315],{"class":300},[269,1441,318],{"class":304},[269,1443,437],{"class":279},[269,1445,324],{"class":304},[269,1447,1448],{"class":271,"line":327},[269,1449,331],{"emptyLinePlaceholder":330},[269,1451,1452,1454,1456,1459,1461,1463,1465,1467,1469,1472,1474,1477,1479,1481],{"class":271,"line":334},[269,1453,337],{"class":300},[269,1455,341],{"class":340},[269,1457,1458],{"class":308}," POST ",[269,1460,455],{"class":304},[269,1462,346],{"class":371},[269,1464,374],{"class":308},[269,1466,462],{"class":340},[269,1468,1177],{"class":304},[269,1470,1471],{"class":1180},"request",[269,1473,387],{"class":304},[269,1475,1476],{"class":275}," Request",[269,1478,1184],{"class":304},[269,1480,468],{"class":340},[269,1482,471],{"class":304},[269,1484,1485,1487,1489,1491,1493],{"class":271,"line":380},[269,1486,476],{"class":340},[269,1488,357],{"class":308},[269,1490,368],{"class":304},[269,1492,352],{"class":371},[269,1494,485],{"class":383},[269,1496,1497,1499,1502,1504,1507,1510,1512,1514],{"class":271,"line":401},[269,1498,476],{"class":340},[269,1500,1501],{"class":308}," body",[269,1503,368],{"class":304},[269,1505,1506],{"class":300}," await",[269,1508,1509],{"class":308}," request",[269,1511,493],{"class":304},[269,1513,531],{"class":371},[269,1515,485],{"class":383},[269,1517,1518],{"class":271,"line":520},[269,1519,331],{"emptyLinePlaceholder":330},[269,1521,1522],{"class":271,"line":554},[269,1523,1524],{"class":688},"  \u002F\u002F Stage 1: User context\n",[269,1526,1527,1529,1531,1533,1535],{"class":271,"line":692},[269,1528,490],{"class":308},[269,1530,493],{"class":304},[269,1532,496],{"class":371},[269,1534,374],{"class":383},[269,1536,377],{"class":304},[269,1538,1539,1542,1544,1546,1549,1551,1553,1555,1558,1560,1563,1565,1567,1570,1572],{"class":271,"line":719},[269,1540,1541],{"class":383},"    user",[269,1543,387],{"class":304},[269,1545,305],{"class":304},[269,1547,1548],{"class":383}," id",[269,1550,387],{"class":304},[269,1552,1501],{"class":308},[269,1554,493],{"class":304},[269,1556,1557],{"class":308},"userId",[269,1559,349],{"class":304},[269,1561,1562],{"class":383}," plan",[269,1564,387],{"class":304},[269,1566,318],{"class":304},[269,1568,1569],{"class":279},"enterprise",[269,1571,395],{"class":304},[269,1573,961],{"class":304},[269,1575,1576,1579],{"class":271,"line":724},[269,1577,1578],{"class":304},"  }",[269,1580,406],{"class":383},[269,1582,1583],{"class":271,"line":730},[269,1584,331],{"emptyLinePlaceholder":330},[269,1586,1587],{"class":271,"line":787},[269,1588,1589],{"class":688},"  \u002F\u002F Stage 2: Cart context\n",[269,1591,1592,1594,1596,1598,1600],{"class":271,"line":792},[269,1593,490],{"class":308},[269,1595,493],{"class":304},[269,1597,496],{"class":371},[269,1599,374],{"class":383},[269,1601,377],{"class":304},[269,1603,1604,1607,1609,1611,1614,1616,1618,1620,1623,1625,1628,1630,1633,1635,1637,1639,1642,1644,1647,1649,1651,1654,1656],{"class":271,"line":798},[269,1605,1606],{"class":383},"    cart",[269,1608,387],{"class":304},[269,1610,305],{"class":304},[269,1612,1613],{"class":383}," items",[269,1615,387],{"class":304},[269,1617,1501],{"class":308},[269,1619,493],{"class":304},[269,1621,1622],{"class":308},"items",[269,1624,493],{"class":304},[269,1626,1627],{"class":308},"length",[269,1629,349],{"class":304},[269,1631,1632],{"class":383}," total",[269,1634,387],{"class":304},[269,1636,1501],{"class":308},[269,1638,493],{"class":304},[269,1640,1641],{"class":308},"total",[269,1643,349],{"class":304},[269,1645,1646],{"class":383}," currency",[269,1648,387],{"class":304},[269,1650,318],{"class":304},[269,1652,1653],{"class":279},"USD",[269,1655,395],{"class":304},[269,1657,961],{"class":304},[269,1659,1660,1662],{"class":271,"line":820},[269,1661,1578],{"class":304},[269,1663,406],{"class":383},[269,1665,1666],{"class":271,"line":837},[269,1667,331],{"emptyLinePlaceholder":330},[269,1669,1670],{"class":271,"line":861},[269,1671,1672],{"class":688},"  \u002F\u002F Stage 3: Payment context\n",[269,1674,1675,1677,1680,1682,1684,1687,1689,1692],{"class":271,"line":869},[269,1676,476],{"class":340},[269,1678,1679],{"class":308}," payment",[269,1681,368],{"class":304},[269,1683,1506],{"class":300},[269,1685,1686],{"class":371}," processPayment",[269,1688,374],{"class":383},[269,1690,1691],{"class":308},"body",[269,1693,406],{"class":383},[269,1695,1696,1698,1700,1702,1704],{"class":271,"line":874},[269,1697,490],{"class":308},[269,1699,493],{"class":304},[269,1701,496],{"class":371},[269,1703,374],{"class":383},[269,1705,377],{"class":304},[269,1707,1708,1711,1713,1715,1718,1720,1722,1724,1727,1729,1732,1734,1736,1738,1741],{"class":271,"line":907},[269,1709,1710],{"class":383},"    payment",[269,1712,387],{"class":304},[269,1714,305],{"class":304},[269,1716,1717],{"class":383}," method",[269,1719,387],{"class":304},[269,1721,1679],{"class":308},[269,1723,493],{"class":304},[269,1725,1726],{"class":308},"method",[269,1728,349],{"class":304},[269,1730,1731],{"class":383}," cardLast4",[269,1733,387],{"class":304},[269,1735,1679],{"class":308},[269,1737,493],{"class":304},[269,1739,1740],{"class":308},"last4",[269,1742,961],{"class":304},[269,1744,1745,1747],{"class":271,"line":922},[269,1746,1578],{"class":304},[269,1748,406],{"class":383},[269,1750,1751],{"class":271,"line":927},[269,1752,331],{"emptyLinePlaceholder":330},[269,1754,1755,1757,1759,1761,1763,1765,1767,1770,1772,1775,1777,1780,1782,1784,1786,1789,1791],{"class":271,"line":933},[269,1756,523],{"class":300},[269,1758,526],{"class":308},[269,1760,493],{"class":304},[269,1762,531],{"class":371},[269,1764,374],{"class":383},[269,1766,501],{"class":304},[269,1768,1769],{"class":383}," success",[269,1771,387],{"class":304},[269,1773,1774],{"class":1265}," true",[269,1776,349],{"class":304},[269,1778,1779],{"class":383}," orderId",[269,1781,387],{"class":304},[269,1783,1679],{"class":308},[269,1785,493],{"class":304},[269,1787,1788],{"class":308},"orderId",[269,1790,312],{"class":304},[269,1792,406],{"class":383},[269,1794,1795,1797],{"class":271,"line":943},[269,1796,365],{"class":304},[269,1798,406],{"class":308},[234,1800,1801],{},"All fields are merged into a single wide event emitted when the handler completes:",[260,1803,1806],{"className":262,"code":1804,"filename":1805,"language":264,"meta":265,"style":265},"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)",[238,1807,1808,1819,1833,1855,1871],{"__ignoreMap":265},[269,1809,1810,1813,1816],{"class":271,"line":272},[269,1811,1812],{"class":275},"10:23:45.612",[269,1814,1815],{"class":279}," INFO",[269,1817,1818],{"class":308}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[269,1820,1821,1824,1827,1830],{"class":271,"line":327},[269,1822,1823],{"class":275},"  ├─",[269,1825,1826],{"class":279}," user:",[269,1828,1829],{"class":279}," id=usr_123",[269,1831,1832],{"class":279}," plan=enterprise\n",[269,1834,1835,1837,1840,1843,1846,1849,1852],{"class":271,"line":334},[269,1836,1823],{"class":275},[269,1838,1839],{"class":279}," cart:",[269,1841,1842],{"class":279}," items=",[269,1844,1845],{"class":767},"3",[269,1847,1848],{"class":279}," total=",[269,1850,1851],{"class":767},"14999",[269,1853,1854],{"class":279}," currency=USD\n",[269,1856,1857,1859,1862,1865,1868],{"class":271,"line":380},[269,1858,1823],{"class":275},[269,1860,1861],{"class":279}," payment:",[269,1863,1864],{"class":279}," method=card",[269,1866,1867],{"class":279}," cardLast4=",[269,1869,1870],{"class":767},"4242\n",[269,1872,1873,1876,1879],{"class":271,"line":401},[269,1874,1875],{"class":275},"  └─",[269,1877,1878],{"class":279}," requestId:",[269,1880,1881],{"class":279}," a1b2c3d4-...\n",[251,1883,1885],{"id":1884},"error-handling","Error Handling",[234,1887,1888,1889,1892,1893,1896,1897,1900,1901,1904],{},"Use ",[238,1890,1891],{},"createError"," for structured errors with ",[238,1894,1895],{},"why",", ",[238,1898,1899],{},"fix",", and ",[238,1902,1903],{},"link"," fields that help developers debug in both logs and API responses:",[260,1906,1909],{"className":290,"code":1907,"filename":1908,"language":293,"meta":265,"style":265},"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",[238,1910,1911,1938,1942,1972,1984,2002,2006,2042,2046,2069,2080,2091,2107,2123,2139,2155,2162,2167,2171,2191,2195,2216,2257,2267,2278,2293,2317,2332,2338,2342,2346,2370],{"__ignoreMap":265},[269,1912,1913,1915,1917,1919,1921,1923,1925,1928,1930,1932,1934,1936],{"class":271,"line":272},[269,1914,301],{"class":300},[269,1916,305],{"class":304},[269,1918,346],{"class":308},[269,1920,349],{"class":304},[269,1922,352],{"class":308},[269,1924,349],{"class":304},[269,1926,1927],{"class":308}," createError",[269,1929,312],{"class":304},[269,1931,315],{"class":300},[269,1933,318],{"class":304},[269,1935,437],{"class":279},[269,1937,324],{"class":304},[269,1939,1940],{"class":271,"line":327},[269,1941,331],{"emptyLinePlaceholder":330},[269,1943,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970],{"class":271,"line":334},[269,1945,337],{"class":300},[269,1947,341],{"class":340},[269,1949,1458],{"class":308},[269,1951,455],{"class":304},[269,1953,346],{"class":371},[269,1955,374],{"class":308},[269,1957,462],{"class":340},[269,1959,1177],{"class":304},[269,1961,1471],{"class":1180},[269,1963,387],{"class":304},[269,1965,1476],{"class":275},[269,1967,1184],{"class":304},[269,1969,468],{"class":340},[269,1971,471],{"class":304},[269,1973,1974,1976,1978,1980,1982],{"class":271,"line":380},[269,1975,476],{"class":340},[269,1977,357],{"class":308},[269,1979,368],{"class":304},[269,1981,352],{"class":371},[269,1983,485],{"class":383},[269,1985,1986,1988,1990,1992,1994,1996,1998,2000],{"class":271,"line":401},[269,1987,476],{"class":340},[269,1989,1501],{"class":308},[269,1991,368],{"class":304},[269,1993,1506],{"class":300},[269,1995,1509],{"class":308},[269,1997,493],{"class":304},[269,1999,531],{"class":371},[269,2001,485],{"class":383},[269,2003,2004],{"class":271,"line":520},[269,2005,331],{"emptyLinePlaceholder":330},[269,2007,2008,2010,2012,2014,2016,2018,2020,2022,2024,2027,2029,2031,2033,2036,2038,2040],{"class":271,"line":554},[269,2009,490],{"class":308},[269,2011,493],{"class":304},[269,2013,496],{"class":371},[269,2015,374],{"class":383},[269,2017,501],{"class":304},[269,2019,1679],{"class":383},[269,2021,387],{"class":304},[269,2023,305],{"class":304},[269,2025,2026],{"class":383}," amount",[269,2028,387],{"class":304},[269,2030,1501],{"class":308},[269,2032,493],{"class":304},[269,2034,2035],{"class":308},"amount",[269,2037,312],{"class":304},[269,2039,312],{"class":304},[269,2041,406],{"class":383},[269,2043,2044],{"class":271,"line":692},[269,2045,331],{"emptyLinePlaceholder":330},[269,2047,2048,2051,2053,2055,2057,2059,2062,2065,2067],{"class":271,"line":719},[269,2049,2050],{"class":300},"  if",[269,2052,1177],{"class":383},[269,2054,1691],{"class":308},[269,2056,493],{"class":304},[269,2058,2035],{"class":308},[269,2060,2061],{"class":304}," \u003C=",[269,2063,2064],{"class":767}," 0",[269,2066,1253],{"class":383},[269,2068,377],{"class":304},[269,2070,2071,2074,2076,2078],{"class":271,"line":724},[269,2072,2073],{"class":300},"    throw",[269,2075,1927],{"class":371},[269,2077,374],{"class":383},[269,2079,377],{"class":304},[269,2081,2082,2085,2087,2089],{"class":271,"line":730},[269,2083,2084],{"class":383},"      status",[269,2086,387],{"class":304},[269,2088,986],{"class":767},[269,2090,398],{"class":304},[269,2092,2093,2096,2098,2100,2103,2105],{"class":271,"line":787},[269,2094,2095],{"class":383},"      message",[269,2097,387],{"class":304},[269,2099,318],{"class":304},[269,2101,2102],{"class":279},"Invalid payment amount",[269,2104,395],{"class":304},[269,2106,398],{"class":304},[269,2108,2109,2112,2114,2116,2119,2121],{"class":271,"line":792},[269,2110,2111],{"class":383},"      why",[269,2113,387],{"class":304},[269,2115,318],{"class":304},[269,2117,2118],{"class":279},"The amount must be a positive number",[269,2120,395],{"class":304},[269,2122,398],{"class":304},[269,2124,2125,2128,2130,2132,2135,2137],{"class":271,"line":798},[269,2126,2127],{"class":383},"      fix",[269,2129,387],{"class":304},[269,2131,318],{"class":304},[269,2133,2134],{"class":279},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[269,2136,395],{"class":304},[269,2138,398],{"class":304},[269,2140,2141,2144,2146,2148,2151,2153],{"class":271,"line":820},[269,2142,2143],{"class":383},"      link",[269,2145,387],{"class":304},[269,2147,318],{"class":304},[269,2149,2150],{"class":279},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[269,2152,395],{"class":304},[269,2154,398],{"class":304},[269,2156,2157,2160],{"class":271,"line":837},[269,2158,2159],{"class":304},"    }",[269,2161,406],{"class":383},[269,2163,2164],{"class":271,"line":861},[269,2165,2166],{"class":304},"  }\n",[269,2168,2169],{"class":271,"line":869},[269,2170,331],{"emptyLinePlaceholder":330},[269,2172,2173,2175,2178,2180,2182,2185,2187,2189],{"class":271,"line":874},[269,2174,476],{"class":340},[269,2176,2177],{"class":308}," result",[269,2179,368],{"class":304},[269,2181,1506],{"class":300},[269,2183,2184],{"class":371}," chargeCard",[269,2186,374],{"class":383},[269,2188,1691],{"class":308},[269,2190,406],{"class":383},[269,2192,2193],{"class":271,"line":907},[269,2194,331],{"emptyLinePlaceholder":330},[269,2196,2197,2199,2201,2204,2207,2209,2212,2214],{"class":271,"line":922},[269,2198,2050],{"class":300},[269,2200,1177],{"class":383},[269,2202,2203],{"class":304},"!",[269,2205,2206],{"class":308},"result",[269,2208,493],{"class":304},[269,2210,2211],{"class":308},"success",[269,2213,1253],{"class":383},[269,2215,377],{"class":304},[269,2217,2218,2221,2223,2226,2228,2231,2234,2236,2239,2242,2245,2247,2249,2252,2255],{"class":271,"line":927},[269,2219,2220],{"class":308},"    log",[269,2222,493],{"class":304},[269,2224,2225],{"class":371},"error",[269,2227,374],{"class":383},[269,2229,2230],{"class":304},"new",[269,2232,2233],{"class":371}," Error",[269,2235,374],{"class":383},[269,2237,2238],{"class":304},"`",[269,2240,2241],{"class":279},"Payment declined: ",[269,2243,2244],{"class":304},"${",[269,2246,2206],{"class":308},[269,2248,493],{"class":304},[269,2250,2251],{"class":308},"reason",[269,2253,2254],{"class":304},"}`",[269,2256,866],{"class":383},[269,2258,2259,2261,2263,2265],{"class":271,"line":933},[269,2260,2073],{"class":300},[269,2262,1927],{"class":371},[269,2264,374],{"class":383},[269,2266,377],{"class":304},[269,2268,2269,2271,2273,2276],{"class":271,"line":943},[269,2270,2084],{"class":383},[269,2272,387],{"class":304},[269,2274,2275],{"class":767}," 402",[269,2277,398],{"class":304},[269,2279,2280,2282,2284,2286,2289,2291],{"class":271,"line":964},[269,2281,2095],{"class":383},[269,2283,387],{"class":304},[269,2285,318],{"class":304},[269,2287,2288],{"class":279},"Payment declined",[269,2290,395],{"class":304},[269,2292,398],{"class":304},[269,2294,2295,2297,2299,2302,2305,2307,2309,2311,2313,2315],{"class":271,"line":975},[269,2296,2111],{"class":383},[269,2298,387],{"class":304},[269,2300,2301],{"class":304}," `",[269,2303,2304],{"class":279},"Card declined by issuer: ",[269,2306,2244],{"class":304},[269,2308,2206],{"class":308},[269,2310,493],{"class":304},[269,2312,2251],{"class":308},[269,2314,2254],{"class":304},[269,2316,398],{"class":304},[269,2318,2319,2321,2323,2325,2328,2330],{"class":271,"line":995},[269,2320,2127],{"class":383},[269,2322,387],{"class":304},[269,2324,318],{"class":304},[269,2326,2327],{"class":279},"Try a different payment method or contact your bank",[269,2329,395],{"class":304},[269,2331,398],{"class":304},[269,2333,2334,2336],{"class":271,"line":1013},[269,2335,2159],{"class":304},[269,2337,406],{"class":383},[269,2339,2340],{"class":271,"line":1035},[269,2341,2166],{"class":304},[269,2343,2344],{"class":271,"line":1043},[269,2345,331],{"emptyLinePlaceholder":330},[269,2347,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368],{"class":271,"line":1049},[269,2349,523],{"class":300},[269,2351,526],{"class":308},[269,2353,493],{"class":304},[269,2355,531],{"class":371},[269,2357,374],{"class":383},[269,2359,501],{"class":304},[269,2361,1769],{"class":383},[269,2363,387],{"class":304},[269,2365,1774],{"class":1265},[269,2367,312],{"class":304},[269,2369,406],{"class":383},[269,2371,2372,2374],{"class":271,"line":1054},[269,2373,365],{"class":304},[269,2375,406],{"class":308},[234,2377,2378,2380,2381,2384],{},[238,2379,244],{}," catches ",[238,2382,2383],{},"EvlogError"," and returns a structured JSON response (like Nitro does for Nuxt):",[260,2386,2390],{"className":2387,"code":2388,"filename":2389,"language":531,"meta":265,"style":265},"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)",[238,2391,2392,2396,2418,2437,2452,2465,2485,2502,2506],{"__ignoreMap":265},[269,2393,2394],{"class":271,"line":272},[269,2395,377],{"class":304},[269,2397,2398,2401,2404,2407,2409,2412,2414,2416],{"class":271,"line":327},[269,2399,2400],{"class":304},"  \"",[269,2402,2403],{"class":340},"name",[269,2405,2406],{"class":304},"\"",[269,2408,387],{"class":304},[269,2410,2411],{"class":304}," \"",[269,2413,2383],{"class":279},[269,2415,2406],{"class":304},[269,2417,398],{"class":304},[269,2419,2420,2422,2425,2427,2429,2431,2433,2435],{"class":271,"line":334},[269,2421,2400],{"class":304},[269,2423,2424],{"class":340},"message",[269,2426,2406],{"class":304},[269,2428,387],{"class":304},[269,2430,2411],{"class":304},[269,2432,2288],{"class":279},[269,2434,2406],{"class":304},[269,2436,398],{"class":304},[269,2438,2439,2441,2444,2446,2448,2450],{"class":271,"line":380},[269,2440,2400],{"class":304},[269,2442,2443],{"class":340},"status",[269,2445,2406],{"class":304},[269,2447,387],{"class":304},[269,2449,2275],{"class":767},[269,2451,398],{"class":304},[269,2453,2454,2456,2459,2461,2463],{"class":271,"line":401},[269,2455,2400],{"class":304},[269,2457,2458],{"class":340},"data",[269,2460,2406],{"class":304},[269,2462,387],{"class":304},[269,2464,471],{"class":304},[269,2466,2467,2470,2472,2474,2476,2478,2481,2483],{"class":271,"line":520},[269,2468,2469],{"class":304},"    \"",[269,2471,1895],{"class":275},[269,2473,2406],{"class":304},[269,2475,387],{"class":304},[269,2477,2411],{"class":304},[269,2479,2480],{"class":279},"Card declined by issuer: insufficient_funds",[269,2482,2406],{"class":304},[269,2484,398],{"class":304},[269,2486,2487,2489,2491,2493,2495,2497,2499],{"class":271,"line":554},[269,2488,2469],{"class":304},[269,2490,1899],{"class":275},[269,2492,2406],{"class":304},[269,2494,387],{"class":304},[269,2496,2411],{"class":304},[269,2498,2327],{"class":279},[269,2500,2501],{"class":304},"\"\n",[269,2503,2504],{"class":271,"line":692},[269,2505,2166],{"class":304},[269,2507,2508],{"class":271,"line":719},[269,2509,2510],{"class":304},"}\n",[234,2512,2513],{},"In the terminal, the error renders with colored output:",[260,2515,2518],{"className":262,"code":2516,"filename":2517,"language":264,"meta":265,"style":265},"Error: Payment declined\nWhy: Card declined by issuer: insufficient_funds\nFix: Try a different payment method or contact your bank\n","Terminal output",[238,2519,2520,2531,2551],{"__ignoreMap":265},[269,2521,2522,2525,2528],{"class":271,"line":272},[269,2523,2524],{"class":275},"Error:",[269,2526,2527],{"class":279}," Payment",[269,2529,2530],{"class":279}," declined\n",[269,2532,2533,2536,2539,2542,2545,2548],{"class":271,"line":327},[269,2534,2535],{"class":275},"Why:",[269,2537,2538],{"class":279}," Card",[269,2540,2541],{"class":279}," declined",[269,2543,2544],{"class":279}," by",[269,2546,2547],{"class":279}," issuer:",[269,2549,2550],{"class":279}," insufficient_funds\n",[269,2552,2553,2556,2559,2562,2565,2567,2569,2572,2575,2578],{"class":271,"line":334},[269,2554,2555],{"class":275},"Fix:",[269,2557,2558],{"class":279}," Try",[269,2560,2561],{"class":279}," a",[269,2563,2564],{"class":279}," different",[269,2566,1679],{"class":279},[269,2568,1717],{"class":279},[269,2570,2571],{"class":279}," or",[269,2573,2574],{"class":279}," contact",[269,2576,2577],{"class":279}," your",[269,2579,2580],{"class":279}," bank\n",[255,2582,2584],{"id":2583},"parsing-errors-on-the-client","Parsing Errors on the Client",[234,2586,1888,2587,2590,2591,2593,2594,2597],{},[238,2588,2589],{},"parseError"," to extract the structured fields from any error — fetch responses, ",[238,2592,2383],{},", or plain ",[238,2595,2596],{},"Error"," objects:",[260,2599,2604],{"className":2600,"code":2601,"filename":2602,"language":2603,"meta":265,"style":265},"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",[238,2605,2606,2615,2634,2638,2662,2669,2696,2712,2764,2770,2823,2838,2877,2882,2887,2892,2896],{"__ignoreMap":265},[269,2607,2608,2610,2613],{"class":271,"line":272},[269,2609,395],{"class":304},[269,2611,2612],{"class":279},"use client",[269,2614,324],{"class":304},[269,2616,2617,2619,2621,2624,2626,2628,2630,2632],{"class":271,"line":327},[269,2618,301],{"class":300},[269,2620,305],{"class":304},[269,2622,2623],{"class":308}," parseError",[269,2625,312],{"class":304},[269,2627,315],{"class":300},[269,2629,318],{"class":304},[269,2631,594],{"class":279},[269,2633,324],{"class":304},[269,2635,2636],{"class":271,"line":334},[269,2637,331],{"emptyLinePlaceholder":330},[269,2639,2640,2642,2645,2648,2650,2653,2655,2658,2660],{"class":271,"line":380},[269,2641,462],{"class":340},[269,2643,2644],{"class":340}," function",[269,2646,2647],{"class":371}," handleSubmit",[269,2649,374],{"class":304},[269,2651,2652],{"class":1180},"formData",[269,2654,387],{"class":304},[269,2656,2657],{"class":275}," FormData",[269,2659,1184],{"class":304},[269,2661,471],{"class":304},[269,2663,2664,2667],{"class":271,"line":401},[269,2665,2666],{"class":300},"  try",[269,2668,471],{"class":304},[269,2670,2671,2673,2676,2678,2680,2683,2685,2687,2690,2692,2694],{"class":271,"line":520},[269,2672,1194],{"class":340},[269,2674,2675],{"class":308}," res",[269,2677,368],{"class":304},[269,2679,1506],{"class":300},[269,2681,2682],{"class":371}," fetch",[269,2684,374],{"class":383},[269,2686,395],{"class":304},[269,2688,2689],{"class":279},"\u002Fapi\u002Fpayment\u002Fprocess",[269,2691,395],{"class":304},[269,2693,349],{"class":304},[269,2695,471],{"class":304},[269,2697,2698,2701,2703,2705,2708,2710],{"class":271,"line":554},[269,2699,2700],{"class":383},"      method",[269,2702,387],{"class":304},[269,2704,318],{"class":304},[269,2706,2707],{"class":279},"POST",[269,2709,395],{"class":304},[269,2711,398],{"class":304},[269,2713,2714,2717,2719,2722,2724,2727,2729,2731,2733,2735,2738,2740,2742,2744,2747,2749,2751,2753,2755,2758,2760,2762],{"class":271,"line":692},[269,2715,2716],{"class":383},"      body",[269,2718,387],{"class":304},[269,2720,2721],{"class":308}," JSON",[269,2723,493],{"class":304},[269,2725,2726],{"class":371},"stringify",[269,2728,374],{"class":383},[269,2730,501],{"class":304},[269,2732,2026],{"class":383},[269,2734,387],{"class":304},[269,2736,2737],{"class":371}," Number",[269,2739,374],{"class":383},[269,2741,2652],{"class":308},[269,2743,493],{"class":304},[269,2745,2746],{"class":371},"get",[269,2748,374],{"class":383},[269,2750,395],{"class":304},[269,2752,2035],{"class":279},[269,2754,395],{"class":304},[269,2756,2757],{"class":383},")) ",[269,2759,365],{"class":304},[269,2761,1184],{"class":383},[269,2763,398],{"class":304},[269,2765,2766,2768],{"class":271,"line":719},[269,2767,2159],{"class":304},[269,2769,406],{"class":383},[269,2771,2772,2774,2776,2778,2781,2783,2786,2788,2791,2793,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820],{"class":271,"line":724},[269,2773,1240],{"class":300},[269,2775,1177],{"class":383},[269,2777,2203],{"class":304},[269,2779,2780],{"class":308},"res",[269,2782,493],{"class":304},[269,2784,2785],{"class":308},"ok",[269,2787,1253],{"class":383},[269,2789,2790],{"class":300},"throw",[269,2792,305],{"class":304},[269,2794,2795],{"class":383}," data",[269,2797,387],{"class":304},[269,2799,1506],{"class":300},[269,2801,2675],{"class":308},[269,2803,493],{"class":304},[269,2805,531],{"class":371},[269,2807,709],{"class":383},[269,2809,349],{"class":304},[269,2811,981],{"class":383},[269,2813,387],{"class":304},[269,2815,2675],{"class":308},[269,2817,493],{"class":304},[269,2819,2443],{"class":308},[269,2821,2822],{"class":304}," }\n",[269,2824,2825,2827,2830,2832,2834,2836],{"class":271,"line":730},[269,2826,1578],{"class":304},[269,2828,2829],{"class":300}," catch",[269,2831,1177],{"class":383},[269,2833,2225],{"class":308},[269,2835,1253],{"class":383},[269,2837,377],{"class":304},[269,2839,2840,2842,2844,2846,2848,2850,2852,2855,2857,2860,2862,2865,2867,2869,2871,2873,2875],{"class":271,"line":787},[269,2841,1194],{"class":340},[269,2843,305],{"class":304},[269,2845,538],{"class":308},[269,2847,349],{"class":304},[269,2849,981],{"class":308},[269,2851,349],{"class":304},[269,2853,2854],{"class":308}," why",[269,2856,349],{"class":304},[269,2858,2859],{"class":308}," fix",[269,2861,349],{"class":304},[269,2863,2864],{"class":308}," link",[269,2866,312],{"class":304},[269,2868,368],{"class":304},[269,2870,2623],{"class":371},[269,2872,374],{"class":383},[269,2874,2225],{"class":308},[269,2876,406],{"class":383},[269,2878,2879],{"class":271,"line":792},[269,2880,2881],{"class":688},"    \u002F\u002F message: \"Payment declined\"\n",[269,2883,2884],{"class":271,"line":798},[269,2885,2886],{"class":688},"    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n",[269,2888,2889],{"class":271,"line":820},[269,2890,2891],{"class":688},"    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n",[269,2893,2894],{"class":271,"line":837},[269,2895,2166],{"class":304},[269,2897,2898],{"class":271,"line":861},[269,2899,2510],{"class":304},[234,2901,2902,2904,2905,2908,2909,2912],{},[238,2903,2589],{}," normalizes any error shape into a flat ",[238,2906,2907],{},"{ message, status, why?, fix?, link? }"," object, so your UI code never has to dig through nested ",[238,2910,2911],{},"data.data"," or check for different error formats.",[251,2914,2916],{"id":2915},"configuration","Configuration",[234,2918,2919,2920,2922],{},"The ",[238,2921,240],{}," factory accepts the following options:",[2924,2925,2926,2945],"table",{},[2927,2928,2929],"thead",{},[2930,2931,2932,2936,2939,2942],"tr",{},[2933,2934,2935],"th",{},"Option",[2933,2937,2938],{},"Type",[2933,2940,2941],{},"Default",[2933,2943,2944],{},"Description",[2946,2947,2948,2969,2986,3006,3024,3043,3062,3081,3100,3119],"tbody",{},[2930,2949,2950,2956,2961,2966],{},[2951,2952,2953],"td",{},[238,2954,2955],{},"service",[2951,2957,2958],{},[238,2959,2960],{},"string",[2951,2962,2963],{},[238,2964,2965],{},"'app'",[2951,2967,2968],{},"Service name shown in logs",[2930,2970,2971,2976,2980,2983],{},[2951,2972,2973],{},[238,2974,2975],{},"environment",[2951,2977,2978],{},[238,2979,2960],{},[2951,2981,2982],{},"Auto-detected",[2951,2984,2985],{},"Environment name",[2930,2987,2988,2993,2998,3003],{},[2951,2989,2990],{},[238,2991,2992],{},"include",[2951,2994,2995],{},[238,2996,2997],{},"string[]",[2951,2999,3000],{},[238,3001,3002],{},"undefined",[2951,3004,3005],{},"Route patterns to log",[2930,3007,3008,3013,3017,3021],{},[2951,3009,3010],{},[238,3011,3012],{},"exclude",[2951,3014,3015],{},[238,3016,2997],{},[2951,3018,3019],{},[238,3020,3002],{},[2951,3022,3023],{},"Route patterns to exclude",[2930,3025,3026,3031,3036,3040],{},[2951,3027,3028],{},[238,3029,3030],{},"routes",[2951,3032,3033],{},[238,3034,3035],{},"Record\u003Cstring, RouteConfig>",[2951,3037,3038],{},[238,3039,3002],{},[2951,3041,3042],{},"Route-specific service configuration",[2930,3044,3045,3050,3055,3059],{},[2951,3046,3047],{},[238,3048,3049],{},"sampling.rates",[2951,3051,3052],{},[238,3053,3054],{},"object",[2951,3056,3057],{},[238,3058,3002],{},[2951,3060,3061],{},"Head sampling rates per log level",[2930,3063,3064,3069,3074,3078],{},[2951,3065,3066],{},[238,3067,3068],{},"sampling.keep",[2951,3070,3071],{},[238,3072,3073],{},"array",[2951,3075,3076],{},[238,3077,3002],{},[2951,3079,3080],{},"Tail sampling conditions",[2930,3082,3083,3088,3093,3097],{},[2951,3084,3085],{},[238,3086,3087],{},"keep",[2951,3089,3090],{},[238,3091,3092],{},"(ctx: TailSamplingContext) => void",[2951,3094,3095],{},[238,3096,3002],{},[2951,3098,3099],{},"Custom tail sampling callback",[2930,3101,3102,3107,3112,3116],{},[2951,3103,3104],{},[238,3105,3106],{},"drain",[2951,3108,3109],{},[238,3110,3111],{},"DrainFunction",[2951,3113,3114],{},[238,3115,3002],{},[2951,3117,3118],{},"Drain adapter for external services",[2930,3120,3121,3126,3131,3135],{},[2951,3122,3123],{},[238,3124,3125],{},"enrich",[2951,3127,3128],{},[238,3129,3130],{},"(ctx: EnrichContext) => void",[2951,3132,3133],{},[238,3134,3002],{},[2951,3136,3137],{},"Event enrichment callback",[251,3139,3141],{"id":3140},"tail-sampling","Tail Sampling",[234,3143,3144],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[260,3146,3148],{"className":290,"code":3147,"filename":292,"language":293,"meta":265,"style":265},"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",[238,3149,3150,3175,3189,3197,3216,3224,3239,3253,3271,3277,3281,3286,3302,3336,3360,3364],{"__ignoreMap":265},[269,3151,3152,3154,3156,3158,3160,3162,3165,3167,3169,3171,3173],{"class":271,"line":272},[269,3153,337],{"class":300},[269,3155,341],{"class":340},[269,3157,305],{"class":304},[269,3159,346],{"class":308},[269,3161,349],{"class":304},[269,3163,3164],{"class":308}," useLogger ",[269,3166,365],{"class":304},[269,3168,368],{"class":304},[269,3170,309],{"class":371},[269,3172,374],{"class":308},[269,3174,377],{"class":304},[269,3176,3177,3179,3181,3183,3185,3187],{"class":271,"line":327},[269,3178,384],{"class":383},[269,3180,387],{"class":304},[269,3182,318],{"class":304},[269,3184,392],{"class":279},[269,3186,395],{"class":304},[269,3188,398],{"class":304},[269,3190,3191,3193,3195],{"class":271,"line":334},[269,3192,936],{"class":383},[269,3194,387],{"class":304},[269,3196,471],{"class":304},[269,3198,3199,3201,3203,3205,3207,3209,3211,3213],{"class":271,"line":380},[269,3200,946],{"class":383},[269,3202,387],{"class":304},[269,3204,305],{"class":304},[269,3206,953],{"class":383},[269,3208,387],{"class":304},[269,3210,958],{"class":767},[269,3212,989],{"class":304},[269,3214,3215],{"class":688}," \u002F\u002F Only keep 10% of info logs\n",[269,3217,3218,3220,3222],{"class":271,"line":401},[269,3219,967],{"class":383},[269,3221,387],{"class":304},[269,3223,972],{"class":308},[269,3225,3226,3228,3230,3232,3234,3236],{"class":271,"line":520},[269,3227,978],{"class":304},[269,3229,981],{"class":383},[269,3231,387],{"class":304},[269,3233,986],{"class":767},[269,3235,989],{"class":304},[269,3237,3238],{"class":688},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[269,3240,3241,3243,3245,3247,3249,3251],{"class":271,"line":554},[269,3242,978],{"class":304},[269,3244,1000],{"class":383},[269,3246,387],{"class":304},[269,3248,1005],{"class":767},[269,3250,989],{"class":304},[269,3252,1010],{"class":688},[269,3254,3255,3257,3259,3261,3263,3265,3267,3269],{"class":271,"line":692},[269,3256,978],{"class":304},[269,3258,1018],{"class":383},[269,3260,387],{"class":304},[269,3262,318],{"class":304},[269,3264,1025],{"class":279},[269,3266,395],{"class":304},[269,3268,989],{"class":304},[269,3270,1032],{"class":688},[269,3272,3273,3275],{"class":271,"line":719},[269,3274,1038],{"class":308},[269,3276,398],{"class":304},[269,3278,3279],{"class":271,"line":724},[269,3280,1046],{"class":304},[269,3282,3283],{"class":271,"line":730},[269,3284,3285],{"class":688},"  \u002F\u002F Custom: always keep premium user requests\n",[269,3287,3288,3290,3292,3294,3296,3298,3300],{"class":271,"line":787},[269,3289,1172],{"class":371},[269,3291,387],{"class":304},[269,3293,1177],{"class":304},[269,3295,1181],{"class":1180},[269,3297,1184],{"class":304},[269,3299,468],{"class":340},[269,3301,471],{"class":304},[269,3303,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334],{"class":271,"line":792},[269,3305,1194],{"class":340},[269,3307,1197],{"class":308},[269,3309,368],{"class":304},[269,3311,1202],{"class":308},[269,3313,493],{"class":304},[269,3315,1207],{"class":308},[269,3317,493],{"class":304},[269,3319,1212],{"class":308},[269,3321,1215],{"class":300},[269,3323,305],{"class":304},[269,3325,1220],{"class":383},[269,3327,1223],{"class":304},[269,3329,1226],{"class":275},[269,3331,312],{"class":304},[269,3333,1231],{"class":304},[269,3335,1234],{"class":275},[269,3337,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358],{"class":271,"line":798},[269,3339,1240],{"class":300},[269,3341,1177],{"class":383},[269,3343,1212],{"class":308},[269,3345,1247],{"class":304},[269,3347,1250],{"class":308},[269,3349,1253],{"class":383},[269,3351,1181],{"class":308},[269,3353,493],{"class":304},[269,3355,1260],{"class":308},[269,3357,368],{"class":304},[269,3359,1266],{"class":1265},[269,3361,3362],{"class":271,"line":820},[269,3363,1046],{"class":304},[269,3365,3366,3368],{"class":271,"line":837},[269,3367,365],{"class":304},[269,3369,406],{"class":308},[234,3371,2919,3372,3374],{},[238,3373,3087],{}," rules use OR logic — any match forces the event through regardless of head sampling.",[251,3376,3378],{"id":3377},"middleware","Middleware",[234,3380,3381,3382,3385,3386,3389,3390,3392],{},"Set ",[238,3383,3384],{},"x-request-id"," and ",[238,3387,3388],{},"x-evlog-start"," headers so ",[238,3391,244],{}," can correlate timing across the middleware -> handler chain:",[260,3394,3397],{"className":290,"code":3395,"filename":3396,"language":293,"meta":265,"style":265},"import { evlogMiddleware } from 'evlog\u002Fnext'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['\u002Fapi\u002F:path*'],\n}\n","proxy.ts",[238,3398,3399,3418,3422,3437,3441,3454,3475],{"__ignoreMap":265},[269,3400,3401,3403,3405,3408,3410,3412,3414,3416],{"class":271,"line":272},[269,3402,301],{"class":300},[269,3404,305],{"class":304},[269,3406,3407],{"class":308}," evlogMiddleware",[269,3409,312],{"class":304},[269,3411,315],{"class":300},[269,3413,318],{"class":304},[269,3415,321],{"class":279},[269,3417,324],{"class":304},[269,3419,3420],{"class":271,"line":327},[269,3421,331],{"emptyLinePlaceholder":330},[269,3423,3424,3426,3428,3431,3433,3435],{"class":271,"line":334},[269,3425,337],{"class":300},[269,3427,341],{"class":340},[269,3429,3430],{"class":308}," proxy ",[269,3432,455],{"class":304},[269,3434,3407],{"class":371},[269,3436,485],{"class":308},[269,3438,3439],{"class":271,"line":380},[269,3440,331],{"emptyLinePlaceholder":330},[269,3442,3443,3445,3447,3450,3452],{"class":271,"line":401},[269,3444,337],{"class":300},[269,3446,341],{"class":340},[269,3448,3449],{"class":308}," config ",[269,3451,455],{"class":304},[269,3453,471],{"class":304},[269,3455,3456,3459,3461,3463,3465,3468,3470,3473],{"class":271,"line":520},[269,3457,3458],{"class":383},"  matcher",[269,3460,387],{"class":304},[269,3462,703],{"class":308},[269,3464,395],{"class":304},[269,3466,3467],{"class":279},"\u002Fapi\u002F:path*",[269,3469,395],{"class":304},[269,3471,3472],{"class":308},"]",[269,3474,398],{"class":304},[269,3476,3477],{"class":271,"line":554},[269,3478,2510],{"class":304},[3480,3481,3483,3484,3487,3488,3490,3491,3493],"callout",{"color":3482,"icon":13},"info","Older versions of Next.js use ",[238,3485,3486],{},"middleware.ts"," instead of ",[238,3489,3396],{},". The evlog middleware works with both — import from ",[238,3492,321],{}," regardless.",[251,3495,3497],{"id":3496},"server-actions","Server Actions",[234,3499,3500,3502],{},[238,3501,244],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[260,3504,3507],{"className":290,"code":3505,"filename":3506,"language":293,"meta":265,"style":265},"'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",[238,3508,3509,3518,3540,3544,3575,3587,3639,3644],{"__ignoreMap":265},[269,3510,3511,3513,3516],{"class":271,"line":272},[269,3512,395],{"class":304},[269,3514,3515],{"class":279},"use server",[269,3517,324],{"class":304},[269,3519,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538],{"class":271,"line":327},[269,3521,301],{"class":300},[269,3523,305],{"class":304},[269,3525,346],{"class":308},[269,3527,349],{"class":304},[269,3529,352],{"class":308},[269,3531,312],{"class":304},[269,3533,315],{"class":300},[269,3535,318],{"class":304},[269,3537,437],{"class":279},[269,3539,324],{"class":304},[269,3541,3542],{"class":271,"line":334},[269,3543,331],{"emptyLinePlaceholder":330},[269,3545,3546,3548,3550,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573],{"class":271,"line":380},[269,3547,337],{"class":300},[269,3549,341],{"class":340},[269,3551,3552],{"class":308}," checkout ",[269,3554,455],{"class":304},[269,3556,346],{"class":371},[269,3558,374],{"class":308},[269,3560,462],{"class":340},[269,3562,1177],{"class":304},[269,3564,2652],{"class":1180},[269,3566,387],{"class":304},[269,3568,2657],{"class":275},[269,3570,1184],{"class":304},[269,3572,468],{"class":340},[269,3574,471],{"class":304},[269,3576,3577,3579,3581,3583,3585],{"class":271,"line":401},[269,3578,476],{"class":340},[269,3580,357],{"class":308},[269,3582,368],{"class":304},[269,3584,352],{"class":371},[269,3586,485],{"class":383},[269,3588,3589,3591,3593,3595,3597,3599,3601,3603,3605,3608,3610,3612,3615,3617,3620,3622,3624,3626,3628,3631,3633,3635,3637],{"class":271,"line":520},[269,3590,490],{"class":308},[269,3592,493],{"class":304},[269,3594,496],{"class":371},[269,3596,374],{"class":383},[269,3598,501],{"class":304},[269,3600,504],{"class":383},[269,3602,387],{"class":304},[269,3604,318],{"class":304},[269,3606,3607],{"class":279},"checkout",[269,3609,395],{"class":304},[269,3611,349],{"class":304},[269,3613,3614],{"class":383}," cartId",[269,3616,387],{"class":304},[269,3618,3619],{"class":308}," formData",[269,3621,493],{"class":304},[269,3623,2746],{"class":371},[269,3625,374],{"class":383},[269,3627,395],{"class":304},[269,3629,3630],{"class":279},"cartId",[269,3632,395],{"class":304},[269,3634,1253],{"class":383},[269,3636,365],{"class":304},[269,3638,406],{"class":383},[269,3640,3641],{"class":271,"line":554},[269,3642,3643],{"class":688},"  \u002F\u002F ...\n",[269,3645,3646,3648],{"class":271,"line":692},[269,3647,365],{"class":304},[269,3649,406],{"class":308},[251,3651,3653],{"id":3652},"client-provider","Client Provider",[234,3655,3656,3657,3660],{},"Wrap your root layout with ",[238,3658,3659],{},"EvlogProvider"," to enable client-side logging and transport:",[260,3662,3665],{"className":2600,"code":3663,"filename":3664,"language":2603,"meta":265,"style":265},"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",[238,3666,3667,3687,3691,3731,3738,3761,3770,3803,3813,3822,3831,3840,3845],{"__ignoreMap":265},[269,3668,3669,3671,3673,3676,3678,3680,3682,3685],{"class":271,"line":272},[269,3670,301],{"class":300},[269,3672,305],{"class":304},[269,3674,3675],{"class":308}," EvlogProvider",[269,3677,312],{"class":304},[269,3679,315],{"class":300},[269,3681,318],{"class":304},[269,3683,3684],{"class":279},"evlog\u002Fnext\u002Fclient",[269,3686,324],{"class":304},[269,3688,3689],{"class":271,"line":327},[269,3690,331],{"emptyLinePlaceholder":330},[269,3692,3693,3695,3698,3700,3703,3706,3709,3712,3714,3716,3718,3721,3723,3726,3729],{"class":271,"line":334},[269,3694,337],{"class":300},[269,3696,3697],{"class":300}," default",[269,3699,2644],{"class":340},[269,3701,3702],{"class":371}," Layout",[269,3704,3705],{"class":304},"({",[269,3707,3708],{"class":1180}," children",[269,3710,3711],{"class":304}," }:",[269,3713,305],{"class":304},[269,3715,3708],{"class":383},[269,3717,387],{"class":304},[269,3719,3720],{"class":275}," React",[269,3722,493],{"class":304},[269,3724,3725],{"class":275},"ReactNode",[269,3727,3728],{"class":304}," })",[269,3730,471],{"class":304},[269,3732,3733,3735],{"class":271,"line":380},[269,3734,523],{"class":300},[269,3736,3737],{"class":383}," (\n",[269,3739,3740,3743,3746,3749,3751,3753,3756,3758],{"class":271,"line":401},[269,3741,3742],{"class":304},"    \u003C",[269,3744,3745],{"class":383},"html",[269,3747,3748],{"class":340}," lang",[269,3750,455],{"class":304},[269,3752,2406],{"class":304},[269,3754,3755],{"class":279},"en",[269,3757,2406],{"class":304},[269,3759,3760],{"class":304},">\n",[269,3762,3763,3766,3768],{"class":271,"line":520},[269,3764,3765],{"class":304},"      \u003C",[269,3767,1691],{"class":383},[269,3769,3760],{"class":304},[269,3771,3772,3775,3777,3779,3781,3783,3785,3787,3790,3793,3796,3798,3800],{"class":271,"line":554},[269,3773,3774],{"class":304},"        \u003C",[269,3776,3659],{"class":275},[269,3778,1085],{"class":340},[269,3780,455],{"class":304},[269,3782,2406],{"class":304},[269,3784,392],{"class":279},[269,3786,2406],{"class":304},[269,3788,3789],{"class":340}," transport",[269,3791,3792],{"class":304},"={{",[269,3794,3795],{"class":383}," enabled",[269,3797,387],{"class":304},[269,3799,1774],{"class":1265},[269,3801,3802],{"class":304}," }}>\n",[269,3804,3805,3808,3811],{"class":271,"line":692},[269,3806,3807],{"class":304},"          {",[269,3809,3810],{"class":308},"children",[269,3812,2510],{"class":304},[269,3814,3815,3818,3820],{"class":271,"line":719},[269,3816,3817],{"class":304},"        \u003C\u002F",[269,3819,3659],{"class":275},[269,3821,3760],{"class":304},[269,3823,3824,3827,3829],{"class":271,"line":724},[269,3825,3826],{"class":304},"      \u003C\u002F",[269,3828,1691],{"class":383},[269,3830,3760],{"class":304},[269,3832,3833,3836,3838],{"class":271,"line":730},[269,3834,3835],{"class":304},"    \u003C\u002F",[269,3837,3745],{"class":383},[269,3839,3760],{"class":304},[269,3841,3842],{"class":271,"line":787},[269,3843,3844],{"class":383},"  )\n",[269,3846,3847],{"class":271,"line":792},[269,3848,2510],{"class":304},[251,3850,145],{"id":3851},"client-logging",[234,3853,1888,3854,3857],{},[238,3855,3856],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[260,3859,3862],{"className":2600,"code":3860,"filename":3861,"language":2603,"meta":265,"style":265},"'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",[238,3863,3864,3872,3900,3904,3940,3945,3958,3983,3996,4012,4016,4022,4079,4084,4092,4096],{"__ignoreMap":265},[269,3865,3866,3868,3870],{"class":271,"line":272},[269,3867,395],{"class":304},[269,3869,2612],{"class":279},[269,3871,324],{"class":304},[269,3873,3874,3876,3878,3880,3882,3885,3887,3890,3892,3894,3896,3898],{"class":271,"line":327},[269,3875,301],{"class":300},[269,3877,305],{"class":304},[269,3879,357],{"class":308},[269,3881,349],{"class":304},[269,3883,3884],{"class":308}," setIdentity",[269,3886,349],{"class":304},[269,3888,3889],{"class":308}," clearIdentity",[269,3891,312],{"class":304},[269,3893,315],{"class":300},[269,3895,318],{"class":304},[269,3897,3684],{"class":279},[269,3899,324],{"class":304},[269,3901,3902],{"class":271,"line":334},[269,3903,331],{"emptyLinePlaceholder":330},[269,3905,3906,3908,3910,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3934,3936,3938],{"class":271,"line":380},[269,3907,337],{"class":300},[269,3909,2644],{"class":340},[269,3911,3912],{"class":371}," Dashboard",[269,3914,3705],{"class":304},[269,3916,1197],{"class":1180},[269,3918,3711],{"class":304},[269,3920,305],{"class":304},[269,3922,1197],{"class":383},[269,3924,387],{"class":304},[269,3926,305],{"class":304},[269,3928,1548],{"class":383},[269,3930,387],{"class":304},[269,3932,3933],{"class":275}," string",[269,3935,312],{"class":304},[269,3937,3728],{"class":304},[269,3939,471],{"class":304},[269,3941,3942],{"class":271,"line":401},[269,3943,3944],{"class":688},"  \u002F\u002F Set identity once — all subsequent logs include it\n",[269,3946,3947,3950,3952,3954,3956],{"class":271,"line":520},[269,3948,3949],{"class":371},"  useEffect",[269,3951,374],{"class":383},[269,3953,709],{"class":304},[269,3955,468],{"class":340},[269,3957,471],{"class":304},[269,3959,3960,3963,3965,3967,3970,3972,3974,3976,3979,3981],{"class":271,"line":554},[269,3961,3962],{"class":371},"    setIdentity",[269,3964,374],{"class":383},[269,3966,501],{"class":304},[269,3968,3969],{"class":383}," userId",[269,3971,387],{"class":304},[269,3973,1197],{"class":308},[269,3975,493],{"class":304},[269,3977,3978],{"class":308},"id",[269,3980,312],{"class":304},[269,3982,406],{"class":383},[269,3984,3985,3988,3990,3992,3994],{"class":271,"line":692},[269,3986,3987],{"class":300},"    return",[269,3989,465],{"class":304},[269,3991,468],{"class":340},[269,3993,3889],{"class":371},[269,3995,485],{"class":383},[269,3997,3998,4001,4003,4005,4007,4009],{"class":271,"line":719},[269,3999,4000],{"class":304},"  },",[269,4002,703],{"class":383},[269,4004,1212],{"class":308},[269,4006,493],{"class":304},[269,4008,3978],{"class":308},[269,4010,4011],{"class":383},"])\n",[269,4013,4014],{"class":271,"line":724},[269,4015,331],{"emptyLinePlaceholder":330},[269,4017,4018,4020],{"class":271,"line":730},[269,4019,523],{"class":300},[269,4021,3737],{"class":383},[269,4023,4024,4026,4029,4032,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4056,4058,4060,4063,4065,4067,4070,4072,4074,4076],{"class":271,"line":787},[269,4025,3742],{"class":304},[269,4027,4028],{"class":383},"button",[269,4030,4031],{"class":340}," onClick",[269,4033,4034],{"class":304},"={()",[269,4036,468],{"class":340},[269,4038,357],{"class":308},[269,4040,493],{"class":304},[269,4042,3482],{"class":371},[269,4044,374],{"class":308},[269,4046,501],{"class":304},[269,4048,504],{"class":383},[269,4050,387],{"class":304},[269,4052,318],{"class":304},[269,4054,4055],{"class":279},"export_clicked",[269,4057,395],{"class":304},[269,4059,349],{"class":304},[269,4061,4062],{"class":383}," format",[269,4064,387],{"class":304},[269,4066,318],{"class":304},[269,4068,4069],{"class":279},"csv",[269,4071,395],{"class":304},[269,4073,312],{"class":304},[269,4075,1184],{"class":308},[269,4077,4078],{"class":304},"}>\n",[269,4080,4081],{"class":271,"line":792},[269,4082,4083],{"class":308},"      Export\n",[269,4085,4086,4088,4090],{"class":271,"line":798},[269,4087,3835],{"class":304},[269,4089,4028],{"class":383},[269,4091,3760],{"class":304},[269,4093,4094],{"class":271,"line":820},[269,4095,3844],{"class":383},[269,4097,4098],{"class":271,"line":837},[269,4099,2510],{"class":304},[251,4101,4103],{"id":4102},"browser-drain","Browser Drain",[234,4105,4106,4107,4109],{},"For advanced use cases, send structured ",[238,4108,745],{}," events directly from the browser to a custom endpoint:",[260,4111,4113],{"className":290,"code":4112,"language":293,"meta":265,"style":265},"import { createBrowserLogDrain } from 'evlog\u002Fbrowser'\n\nconst drain = createBrowserLogDrain({\n  drain: { endpoint: '\u002Fapi\u002Fevlog\u002Fbrowser-ingest' },\n  pipeline: { batch: { size: 10, intervalMs: 5000 } },\n})\n\ndrain(drainEvent)\nawait drain.flush()\n",[238,4114,4115,4135,4139,4153,4175,4208,4214,4218,4225],{"__ignoreMap":265},[269,4116,4117,4119,4121,4124,4126,4128,4130,4133],{"class":271,"line":272},[269,4118,301],{"class":300},[269,4120,305],{"class":304},[269,4122,4123],{"class":308}," createBrowserLogDrain",[269,4125,312],{"class":304},[269,4127,315],{"class":300},[269,4129,318],{"class":304},[269,4131,4132],{"class":279},"evlog\u002Fbrowser",[269,4134,324],{"class":304},[269,4136,4137],{"class":271,"line":327},[269,4138,331],{"emptyLinePlaceholder":330},[269,4140,4141,4143,4145,4147,4149,4151],{"class":271,"line":334},[269,4142,695],{"class":340},[269,4144,803],{"class":308},[269,4146,455],{"class":304},[269,4148,4123],{"class":371},[269,4150,374],{"class":308},[269,4152,377],{"class":304},[269,4154,4155,4157,4159,4161,4164,4166,4168,4171,4173],{"class":271,"line":380},[269,4156,1402],{"class":383},[269,4158,387],{"class":304},[269,4160,305],{"class":304},[269,4162,4163],{"class":383}," endpoint",[269,4165,387],{"class":304},[269,4167,318],{"class":304},[269,4169,4170],{"class":279},"\u002Fapi\u002Fevlog\u002Fbrowser-ingest",[269,4172,395],{"class":304},[269,4174,961],{"class":304},[269,4176,4177,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206],{"class":271,"line":401},[269,4178,4179],{"class":383},"  pipeline",[269,4181,387],{"class":304},[269,4183,305],{"class":304},[269,4185,755],{"class":383},[269,4187,387],{"class":304},[269,4189,305],{"class":304},[269,4191,762],{"class":383},[269,4193,387],{"class":304},[269,4195,958],{"class":767},[269,4197,349],{"class":304},[269,4199,773],{"class":383},[269,4201,387],{"class":304},[269,4203,778],{"class":767},[269,4205,312],{"class":304},[269,4207,961],{"class":304},[269,4209,4210,4212],{"class":271,"line":520},[269,4211,365],{"class":304},[269,4213,406],{"class":308},[269,4215,4216],{"class":271,"line":554},[269,4217,331],{"emptyLinePlaceholder":330},[269,4219,4220,4222],{"class":271,"line":692},[269,4221,3106],{"class":371},[269,4223,4224],{"class":308},"(drainEvent)\n",[269,4226,4227,4230,4233,4235,4238],{"class":271,"line":719},[269,4228,4229],{"class":300},"await",[269,4231,4232],{"class":308}," drain",[269,4234,493],{"class":304},[269,4236,4237],{"class":371},"flush",[269,4239,485],{"class":308},[234,4241,4242],{},"The server endpoint receives batched events:",[260,4244,4247],{"className":290,"code":4245,"filename":4246,"language":293,"meta":265,"style":265},"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\u002Fbrowser-ingest\u002Froute.ts",[238,4248,4249,4273,4292,4297,4324],{"__ignoreMap":265},[269,4250,4251,4253,4256,4258,4261,4263,4265,4267,4269,4271],{"class":271,"line":272},[269,4252,337],{"class":300},[269,4254,4255],{"class":340}," async",[269,4257,2644],{"class":340},[269,4259,4260],{"class":371}," POST",[269,4262,374],{"class":304},[269,4264,1471],{"class":1180},[269,4266,387],{"class":304},[269,4268,1476],{"class":275},[269,4270,1184],{"class":304},[269,4272,471],{"class":304},[269,4274,4275,4277,4280,4282,4284,4286,4288,4290],{"class":271,"line":327},[269,4276,476],{"class":340},[269,4278,4279],{"class":308}," events",[269,4281,368],{"class":304},[269,4283,1506],{"class":300},[269,4285,1509],{"class":308},[269,4287,493],{"class":304},[269,4289,531],{"class":371},[269,4291,485],{"class":383},[269,4293,4294],{"class":271,"line":334},[269,4295,4296],{"class":688},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[269,4298,4299,4301,4304,4306,4308,4311,4313,4315,4317,4320,4322],{"class":271,"line":380},[269,4300,523],{"class":300},[269,4302,4303],{"class":304}," new",[269,4305,526],{"class":371},[269,4307,374],{"class":383},[269,4309,4310],{"class":304},"null,",[269,4312,305],{"class":304},[269,4314,981],{"class":383},[269,4316,387],{"class":304},[269,4318,4319],{"class":767}," 204",[269,4321,312],{"class":304},[269,4323,406],{"class":383},[269,4325,4326],{"class":271,"line":401},[269,4327,2510],{"class":304},[251,4329,4331],{"id":4330},"run-locally","Run Locally",[260,4333,4335],{"className":262,"code":4334,"language":264,"meta":265,"style":265},"git clone https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\ncd evlog\u002Fexamples\u002Fnextjs\nbun install\nbun run dev\n",[238,4336,4337,4348,4356,4363],{"__ignoreMap":265},[269,4338,4339,4342,4345],{"class":271,"line":272},[269,4340,4341],{"class":275},"git",[269,4343,4344],{"class":279}," clone",[269,4346,4347],{"class":279}," https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\n",[269,4349,4350,4353],{"class":271,"line":327},[269,4351,4352],{"class":371},"cd",[269,4354,4355],{"class":279}," evlog\u002Fexamples\u002Fnextjs\n",[269,4357,4358,4360],{"class":271,"line":334},[269,4359,276],{"class":275},[269,4361,4362],{"class":279}," install\n",[269,4364,4365,4367,4370],{"class":271,"line":380},[269,4366,276],{"class":275},[269,4368,4369],{"class":279}," run",[269,4371,4372],{"class":279}," dev\n",[234,4374,4375,4376,4382],{},"Open ",[4377,4378,4379],"a",{"href":4379,"rel":4380},"http:\u002F\u002Flocalhost:3000",[4381],"nofollow"," to explore the example.",[4384,4385,4386],"card-group",{},[4387,4388,4392],"card",{"icon":4389,"title":4390,"to":4391},"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.",[4394,4395,4396],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .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}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":265,"searchDepth":327,"depth":327,"links":4398},[4399,4404,4405,4406,4409,4410,4411,4412,4413,4414,4415,4416],{"id":253,"depth":327,"text":20,"children":4400},[4401,4402,4403],{"id":257,"depth":334,"text":258},{"id":286,"depth":334,"text":287},{"id":409,"depth":334,"text":410},{"id":561,"depth":327,"text":562},{"id":1414,"depth":327,"text":121},{"id":1884,"depth":327,"text":1885,"children":4407},[4408],{"id":2583,"depth":334,"text":2584},{"id":2915,"depth":327,"text":2916},{"id":3140,"depth":327,"text":3141},{"id":3377,"depth":327,"text":3378},{"id":3496,"depth":327,"text":3497},{"id":3652,"depth":327,"text":3653},{"id":3851,"depth":327,"text":145},{"id":4102,"depth":327,"text":4103},{"id":4330,"depth":327,"text":4331},"Using evlog with Next.js — wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging.","md",[4420],{"label":4390,"icon":4389,"to":4391,"color":4421,"variant":4422},"neutral","subtle",{},{"title":46,"icon":49},{"title":46,"description":4417},"tirzweIdU6qR_hn2rABlZ_GCF6beAxyOdgMfLhkAufw",[4428,4430],{"title":41,"path":42,"stem":43,"description":4429,"icon":44,"children":-1},"Using evlog with Nuxt — automatic wide events, structured errors, drain adapters, enrichers, tail sampling, and client transport in Nuxt applications.",{"title":51,"path":52,"stem":53,"description":4431,"icon":54,"children":-1},"Using evlog with SvelteKit — automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.",1773428027783]