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