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