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