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