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