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