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