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