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