[{"data":1,"prerenderedAt":6404},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nextjs":612,"-integrate-frameworks-nextjs-surround":6399},[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":6390,"extension":6391,"links":6392,"meta":6395,"navigation":6396,"path":256,"seo":6397,"stem":257,"__hash__":6398},"docs\u002F4.integrate\u002Fframeworks\u002F02.nextjs.md",{"type":615,"value":616,"toc":6359},"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,4807,4976,5042,5068,5072,5075,5300,5305,5308,5321,5405,5418,5422,5427,5574,5578,5585,5773,5776,5782,6024,6028,6034,6165,6168,6252,6256,6298,6306,6316,6320,6326,6355],[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. 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",[686,4790,4792],{"id":4791},"keep-the-options-in-evlogconfigts","Keep the options in evlog.config.ts",[618,4794,4795,4796,4801,4802,4804,4805,864],{},"The options can live in an ",[671,4797,4798],{"href":105},[622,4799,4800],{},"evlog.config.ts"," at the root of the app, the file the CLI reads too. Read it in ",[622,4803,769],{}," for both the instrumentation and ",[622,4806,624],{},[694,4808,4810],{"className":767,"code":4809,"filename":769,"language":770,"meta":700,"style":700},"import { toLoggerConfig } from 'evlog'\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation\u002Fcreate'\nimport config from '..\u002Fevlog.config'\n\nexport const { register, onRequestError } = createInstrumentation({\n  ...toLoggerConfig(config),\n  captureOutput: true,\n})\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog(config)\n",[622,4811,4812,4831,4849,4867,4884,4888,4912,4925,4935,4941,4945],{"__ignoreMap":700},[704,4813,4814,4816,4818,4821,4823,4825,4827,4829],{"class":706,"line":707},[704,4815,778],{"class":777},[704,4817,782],{"class":781},[704,4819,4820],{"class":785}," toLoggerConfig",[704,4822,789],{"class":781},[704,4824,792],{"class":777},[704,4826,795],{"class":781},[704,4828,1954],{"class":713},[704,4830,801],{"class":781},[704,4832,4833,4835,4837,4839,4841,4843,4845,4847],{"class":706,"line":804},[704,4834,778],{"class":777},[704,4836,782],{"class":781},[704,4838,786],{"class":785},[704,4840,789],{"class":781},[704,4842,792],{"class":777},[704,4844,795],{"class":781},[704,4846,798],{"class":713},[704,4848,801],{"class":781},[704,4850,4851,4853,4855,4857,4859,4861,4863,4865],{"class":706,"line":811},[704,4852,778],{"class":777},[704,4854,782],{"class":781},[704,4856,1438],{"class":785},[704,4858,789],{"class":781},[704,4860,792],{"class":777},[704,4862,795],{"class":781},[704,4864,1455],{"class":713},[704,4866,801],{"class":781},[704,4868,4869,4871,4874,4877,4879,4882],{"class":706,"line":857},[704,4870,778],{"class":777},[704,4872,4873],{"class":785}," config ",[704,4875,4876],{"class":777},"from",[704,4878,795],{"class":781},[704,4880,4881],{"class":713},"..\u002Fevlog.config",[704,4883,801],{"class":781},[704,4885,4886],{"class":706,"line":878},[704,4887,808],{"emptyLinePlaceholder":807},[704,4889,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910],{"class":706,"line":997},[704,4891,814],{"class":777},[704,4893,818],{"class":817},[704,4895,782],{"class":781},[704,4897,1184],{"class":785},[704,4899,826],{"class":781},[704,4901,1189],{"class":785},[704,4903,842],{"class":781},[704,4905,845],{"class":781},[704,4907,1438],{"class":848},[704,4909,851],{"class":785},[704,4911,854],{"class":781},[704,4913,4914,4917,4920,4923],{"class":706,"line":1031},[704,4915,4916],{"class":781},"  ...",[704,4918,4919],{"class":848},"toLoggerConfig",[704,4921,4922],{"class":785},"(config)",[704,4924,875],{"class":781},[704,4926,4927,4929,4931,4933],{"class":706,"line":1521},[704,4928,1218],{"class":860},[704,4930,864],{"class":781},[704,4932,1224],{"class":1223},[704,4934,875],{"class":781},[704,4936,4937,4939],{"class":706,"line":1529},[704,4938,842],{"class":781},[704,4940,883],{"class":785},[704,4942,4943],{"class":706,"line":1534},[704,4944,808],{"emptyLinePlaceholder":807},[704,4946,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973],{"class":706,"line":1541},[704,4948,814],{"class":777},[704,4950,818],{"class":817},[704,4952,782],{"class":781},[704,4954,823],{"class":785},[704,4956,826],{"class":781},[704,4958,829],{"class":785},[704,4960,826],{"class":781},[704,4962,834],{"class":785},[704,4964,826],{"class":781},[704,4966,839],{"class":785},[704,4968,842],{"class":781},[704,4970,845],{"class":781},[704,4972,786],{"class":848},[704,4974,4975],{"class":785},"(config)\n",[694,4977,4979],{"className":767,"code":4978,"filename":1049,"language":770,"meta":700,"style":700},"import { defineNodeInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nexport const { register, onRequestError } = defineNodeInstrumentation(() => import('.\u002Flib\u002Fevlog'))\n",[622,4980,4981,4999,5003],{"__ignoreMap":700},[704,4982,4983,4985,4987,4989,4991,4993,4995,4997],{"class":706,"line":707},[704,4984,778],{"class":777},[704,4986,782],{"class":781},[704,4988,1158],{"class":785},[704,4990,789],{"class":781},[704,4992,792],{"class":777},[704,4994,795],{"class":781},[704,4996,1167],{"class":713},[704,4998,801],{"class":781},[704,5000,5001],{"class":706,"line":804},[704,5002,808],{"emptyLinePlaceholder":807},[704,5004,5005,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5038,5040],{"class":706,"line":811},[704,5006,814],{"class":777},[704,5008,818],{"class":817},[704,5010,782],{"class":781},[704,5012,1184],{"class":785},[704,5014,826],{"class":781},[704,5016,1189],{"class":785},[704,5018,842],{"class":781},[704,5020,845],{"class":781},[704,5022,1158],{"class":848},[704,5024,851],{"class":785},[704,5026,1336],{"class":781},[704,5028,945],{"class":817},[704,5030,1448],{"class":781},[704,5032,851],{"class":785},[704,5034,872],{"class":781},[704,5036,5037],{"class":713},".\u002Flib\u002Fevlog",[704,5039,872],{"class":781},[704,5041,2211],{"class":785},[618,5043,5044,5046,5047,5049,5050,5052,5053,5055,5056,1627,5058,5060,5061,5067],{},[622,5045,1117],{}," loads ",[622,5048,769],{}," on Node.js only, so the drains the config imports stay out of the Edge bundle. ",[622,5051,1083],{}," starts the logger from the file before any route runs, and ",[622,5054,624],{}," takes the route filters, ",[622,5057,4776],{},[622,5059,4739],{}," from it. ",[671,5062,5064],{"href":5063},"\u002Fcli\u002Finit#nextjs",[622,5065,5066],{},"evlog init"," writes both files for you.",[682,5069,5071],{"id":5070},"tail-sampling","Tail Sampling",[618,5073,5074],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[694,5076,5078],{"className":767,"code":5077,"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,5079,5080,5105,5119,5127,5146,5154,5169,5183,5201,5207,5211,5216,5232,5266,5290,5294],{"__ignoreMap":700},[704,5081,5082,5084,5086,5088,5090,5092,5095,5097,5099,5101,5103],{"class":706,"line":707},[704,5083,814],{"class":777},[704,5085,818],{"class":817},[704,5087,782],{"class":781},[704,5089,823],{"class":785},[704,5091,826],{"class":781},[704,5093,5094],{"class":785}," useLogger ",[704,5096,842],{"class":781},[704,5098,845],{"class":781},[704,5100,786],{"class":848},[704,5102,851],{"class":785},[704,5104,854],{"class":781},[704,5106,5107,5109,5111,5113,5115,5117],{"class":706,"line":804},[704,5108,861],{"class":860},[704,5110,864],{"class":781},[704,5112,795],{"class":781},[704,5114,869],{"class":713},[704,5116,872],{"class":781},[704,5118,875],{"class":781},[704,5120,5121,5123,5125],{"class":706,"line":811},[704,5122,2281],{"class":860},[704,5124,864],{"class":781},[704,5126,948],{"class":781},[704,5128,5129,5131,5133,5135,5137,5139,5141,5143],{"class":706,"line":857},[704,5130,2291],{"class":860},[704,5132,864],{"class":781},[704,5134,782],{"class":781},[704,5136,2298],{"class":860},[704,5138,864],{"class":781},[704,5140,2303],{"class":2120},[704,5142,2334],{"class":781},[704,5144,5145],{"class":1566}," \u002F\u002F Only keep 10% of info logs\n",[704,5147,5148,5150,5152],{"class":706,"line":878},[704,5149,2312],{"class":860},[704,5151,864],{"class":781},[704,5153,2317],{"class":785},[704,5155,5156,5158,5160,5162,5164,5166],{"class":706,"line":997},[704,5157,2323],{"class":781},[704,5159,2326],{"class":860},[704,5161,864],{"class":781},[704,5163,2331],{"class":2120},[704,5165,2334],{"class":781},[704,5167,5168],{"class":1566},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[704,5170,5171,5173,5175,5177,5179,5181],{"class":706,"line":1031},[704,5172,2323],{"class":781},[704,5174,2345],{"class":860},[704,5176,864],{"class":781},[704,5178,2350],{"class":2120},[704,5180,2334],{"class":781},[704,5182,2355],{"class":1566},[704,5184,5185,5187,5189,5191,5193,5195,5197,5199],{"class":706,"line":1521},[704,5186,2323],{"class":781},[704,5188,2363],{"class":860},[704,5190,864],{"class":781},[704,5192,795],{"class":781},[704,5194,2370],{"class":713},[704,5196,872],{"class":781},[704,5198,2334],{"class":781},[704,5200,2377],{"class":1566},[704,5202,5203,5205],{"class":706,"line":1529},[704,5204,2383],{"class":785},[704,5206,875],{"class":781},[704,5208,5209],{"class":706,"line":1534},[704,5210,1909],{"class":781},[704,5212,5213],{"class":706,"line":1541},[704,5214,5215],{"class":1566},"  \u002F\u002F Custom: always keep premium user requests\n",[704,5217,5218,5220,5222,5224,5226,5228,5230],{"class":706,"line":1553},[704,5219,2516],{"class":848},[704,5221,864],{"class":781},[704,5223,2521],{"class":781},[704,5225,2525],{"class":2524},[704,5227,2528],{"class":781},[704,5229,945],{"class":817},[704,5231,948],{"class":781},[704,5233,5234,5236,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262,5264],{"class":706,"line":1563},[704,5235,2538],{"class":817},[704,5237,2541],{"class":785},[704,5239,845],{"class":781},[704,5241,2546],{"class":785},[704,5243,970],{"class":781},[704,5245,2551],{"class":785},[704,5247,970],{"class":781},[704,5249,2556],{"class":785},[704,5251,2559],{"class":777},[704,5253,782],{"class":781},[704,5255,2564],{"class":860},[704,5257,2567],{"class":781},[704,5259,2570],{"class":710},[704,5261,789],{"class":781},[704,5263,2575],{"class":781},[704,5265,2578],{"class":710},[704,5267,5268,5270,5272,5274,5276,5278,5280,5282,5284,5286,5288],{"class":706,"line":1570},[704,5269,2584],{"class":777},[704,5271,2521],{"class":860},[704,5273,2556],{"class":785},[704,5275,2591],{"class":781},[704,5277,2594],{"class":785},[704,5279,2597],{"class":860},[704,5281,2525],{"class":785},[704,5283,970],{"class":781},[704,5285,2604],{"class":785},[704,5287,845],{"class":781},[704,5289,2609],{"class":1223},[704,5291,5292],{"class":706,"line":1576},[704,5293,1909],{"class":781},[704,5295,5296,5298],{"class":706,"line":1588},[704,5297,842],{"class":781},[704,5299,883],{"class":785},[618,5301,4582,5302,5304],{},[622,5303,4739],{}," rules use OR logic: any match forces the event through regardless of head sampling.",[682,5306,384],{"id":5307},"middleware",[618,5309,5310,5311,1627,5314,5317,5318,5320],{},"Set ",[622,5312,5313],{},"x-request-id",[622,5315,5316],{},"x-evlog-start"," headers so ",[622,5319,628],{}," can correlate timing across the middleware -> handler chain:",[694,5322,5325],{"className":767,"code":5323,"filename":5324,"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,5326,5327,5346,5350,5365,5369,5381,5401],{"__ignoreMap":700},[704,5328,5329,5331,5333,5336,5338,5340,5342,5344],{"class":706,"line":707},[704,5330,778],{"class":777},[704,5332,782],{"class":781},[704,5334,5335],{"class":785}," evlogMiddleware",[704,5337,789],{"class":781},[704,5339,792],{"class":777},[704,5341,795],{"class":781},[704,5343,798],{"class":713},[704,5345,801],{"class":781},[704,5347,5348],{"class":706,"line":804},[704,5349,808],{"emptyLinePlaceholder":807},[704,5351,5352,5354,5356,5359,5361,5363],{"class":706,"line":811},[704,5353,814],{"class":777},[704,5355,818],{"class":817},[704,5357,5358],{"class":785}," proxy ",[704,5360,932],{"class":781},[704,5362,5335],{"class":848},[704,5364,962],{"class":785},[704,5366,5367],{"class":706,"line":857},[704,5368,808],{"emptyLinePlaceholder":807},[704,5370,5371,5373,5375,5377,5379],{"class":706,"line":878},[704,5372,814],{"class":777},[704,5374,818],{"class":817},[704,5376,4873],{"class":785},[704,5378,932],{"class":781},[704,5380,948],{"class":781},[704,5382,5383,5386,5388,5390,5392,5395,5397,5399],{"class":706,"line":997},[704,5384,5385],{"class":860},"  matcher",[704,5387,864],{"class":781},[704,5389,1882],{"class":785},[704,5391,872],{"class":781},[704,5393,5394],{"class":713},"\u002Fapi\u002F:path*",[704,5396,872],{"class":781},[704,5398,1902],{"class":785},[704,5400,875],{"class":781},[704,5402,5403],{"class":706,"line":1031},[704,5404,4075],{"class":781},[1056,5406,5407,5408,5411,5412,5414,5415,5417],{"color":1058,"icon":13},"Older versions of Next.js use ",[622,5409,5410],{},"middleware.ts"," instead of ",[622,5413,5324],{},". The evlog middleware works with both, so just import from ",[622,5416,798],{}," regardless.",[682,5419,5421],{"id":5420},"server-actions","Server Actions",[618,5423,5424,5426],{},[622,5425,628],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[694,5428,5431],{"className":767,"code":5429,"filename":5430,"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,5432,5433,5442,5464,5468,5499,5511,5563,5568],{"__ignoreMap":700},[704,5434,5435,5437,5440],{"class":706,"line":707},[704,5436,872],{"class":781},[704,5438,5439],{"class":713},"use server",[704,5441,801],{"class":781},[704,5443,5444,5446,5448,5450,5452,5454,5456,5458,5460,5462],{"class":706,"line":804},[704,5445,778],{"class":777},[704,5447,782],{"class":781},[704,5449,823],{"class":785},[704,5451,826],{"class":781},[704,5453,829],{"class":785},[704,5455,789],{"class":781},[704,5457,792],{"class":777},[704,5459,795],{"class":781},[704,5461,914],{"class":713},[704,5463,801],{"class":781},[704,5465,5466],{"class":706,"line":811},[704,5467,808],{"emptyLinePlaceholder":807},[704,5469,5470,5472,5474,5477,5479,5481,5483,5485,5487,5489,5491,5493,5495,5497],{"class":706,"line":857},[704,5471,814],{"class":777},[704,5473,818],{"class":817},[704,5475,5476],{"class":785}," checkout ",[704,5478,932],{"class":781},[704,5480,823],{"class":848},[704,5482,851],{"class":785},[704,5484,939],{"class":817},[704,5486,2521],{"class":781},[704,5488,4301],{"class":2524},[704,5490,864],{"class":781},[704,5492,4306],{"class":710},[704,5494,2528],{"class":781},[704,5496,945],{"class":817},[704,5498,948],{"class":781},[704,5500,5501,5503,5505,5507,5509],{"class":706,"line":878},[704,5502,953],{"class":817},[704,5504,834],{"class":785},[704,5506,845],{"class":781},[704,5508,829],{"class":848},[704,5510,962],{"class":860},[704,5512,5513,5515,5517,5519,5521,5523,5525,5527,5529,5532,5534,5536,5539,5541,5544,5546,5548,5550,5552,5555,5557,5559,5561],{"class":706,"line":997},[704,5514,967],{"class":785},[704,5516,970],{"class":781},[704,5518,973],{"class":848},[704,5520,851],{"class":860},[704,5522,978],{"class":781},[704,5524,981],{"class":860},[704,5526,864],{"class":781},[704,5528,795],{"class":781},[704,5530,5531],{"class":713},"checkout",[704,5533,872],{"class":781},[704,5535,826],{"class":781},[704,5537,5538],{"class":860}," cartId",[704,5540,864],{"class":781},[704,5542,5543],{"class":785}," formData",[704,5545,970],{"class":781},[704,5547,4394],{"class":848},[704,5549,851],{"class":860},[704,5551,872],{"class":781},[704,5553,5554],{"class":713},"cartId",[704,5556,872],{"class":781},[704,5558,2597],{"class":860},[704,5560,842],{"class":781},[704,5562,883],{"class":860},[704,5564,5565],{"class":706,"line":1031},[704,5566,5567],{"class":1566},"  \u002F\u002F ...\n",[704,5569,5570,5572],{"class":706,"line":1521},[704,5571,842],{"class":781},[704,5573,883],{"class":785},[682,5575,5577],{"id":5576},"client-provider","Client Provider",[618,5579,5580,5581,5584],{},"Wrap your root layout with ",[622,5582,5583],{},"EvlogProvider"," to enable client-side logging and its drain:",[694,5586,5589],{"className":4249,"code":5587,"filename":5588,"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,5590,5591,5611,5615,5655,5662,5685,5694,5727,5737,5746,5755,5764,5769],{"__ignoreMap":700},[704,5592,5593,5595,5597,5600,5602,5604,5606,5609],{"class":706,"line":707},[704,5594,778],{"class":777},[704,5596,782],{"class":781},[704,5598,5599],{"class":785}," EvlogProvider",[704,5601,789],{"class":781},[704,5603,792],{"class":777},[704,5605,795],{"class":781},[704,5607,5608],{"class":713},"evlog\u002Fnext\u002Fclient",[704,5610,801],{"class":781},[704,5612,5613],{"class":706,"line":804},[704,5614,808],{"emptyLinePlaceholder":807},[704,5616,5617,5619,5622,5624,5627,5630,5633,5636,5638,5640,5642,5645,5647,5650,5653],{"class":706,"line":811},[704,5618,814],{"class":777},[704,5620,5621],{"class":777}," default",[704,5623,4293],{"class":817},[704,5625,5626],{"class":848}," Layout",[704,5628,5629],{"class":781},"({",[704,5631,5632],{"class":2524}," children",[704,5634,5635],{"class":781}," }:",[704,5637,782],{"class":781},[704,5639,5632],{"class":860},[704,5641,864],{"class":781},[704,5643,5644],{"class":710}," React",[704,5646,970],{"class":781},[704,5648,5649],{"class":710},"ReactNode",[704,5651,5652],{"class":781}," })",[704,5654,948],{"class":781},[704,5656,5657,5659],{"class":706,"line":857},[704,5658,1000],{"class":777},[704,5660,5661],{"class":860}," (\n",[704,5663,5664,5667,5670,5673,5675,5677,5680,5682],{"class":706,"line":878},[704,5665,5666],{"class":781},"    \u003C",[704,5668,5669],{"class":860},"html",[704,5671,5672],{"class":817}," lang",[704,5674,932],{"class":781},[704,5676,3971],{"class":781},[704,5678,5679],{"class":713},"en",[704,5681,3971],{"class":781},[704,5683,5684],{"class":781},">\n",[704,5686,5687,5690,5692],{"class":706,"line":997},[704,5688,5689],{"class":781},"      \u003C",[704,5691,3056],{"class":860},[704,5693,5684],{"class":781},[704,5695,5696,5699,5701,5703,5705,5707,5709,5711,5714,5717,5720,5722,5724],{"class":706,"line":1031},[704,5697,5698],{"class":781},"        \u003C",[704,5700,5583],{"class":710},[704,5702,2429],{"class":817},[704,5704,932],{"class":781},[704,5706,3971],{"class":781},[704,5708,869],{"class":713},[704,5710,3971],{"class":781},[704,5712,5713],{"class":817}," transport",[704,5715,5716],{"class":781},"={{",[704,5718,5719],{"class":860}," enabled",[704,5721,864],{"class":781},[704,5723,1224],{"class":1223},[704,5725,5726],{"class":781}," }}>\n",[704,5728,5729,5732,5735],{"class":706,"line":1521},[704,5730,5731],{"class":781},"          {",[704,5733,5734],{"class":785},"children",[704,5736,4075],{"class":781},[704,5738,5739,5742,5744],{"class":706,"line":1529},[704,5740,5741],{"class":781},"        \u003C\u002F",[704,5743,5583],{"class":710},[704,5745,5684],{"class":781},[704,5747,5748,5751,5753],{"class":706,"line":1534},[704,5749,5750],{"class":781},"      \u003C\u002F",[704,5752,3056],{"class":860},[704,5754,5684],{"class":781},[704,5756,5757,5760,5762],{"class":706,"line":1541},[704,5758,5759],{"class":781},"    \u003C\u002F",[704,5761,5669],{"class":860},[704,5763,5684],{"class":781},[704,5765,5766],{"class":706,"line":1553},[704,5767,5768],{"class":860},"  )\n",[704,5770,5771],{"class":706,"line":1563},[704,5772,4075],{"class":781},[682,5774,337],{"id":5775},"client-logging",[618,5777,3454,5778,5781],{},[622,5779,5780],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[694,5783,5786],{"className":4249,"code":5784,"filename":5785,"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,5787,5788,5796,5824,5828,5864,5869,5882,5907,5920,5936,5940,5946,6003,6008,6016,6020],{"__ignoreMap":700},[704,5789,5790,5792,5794],{"class":706,"line":707},[704,5791,872],{"class":781},[704,5793,4261],{"class":713},[704,5795,801],{"class":781},[704,5797,5798,5800,5802,5804,5806,5809,5811,5814,5816,5818,5820,5822],{"class":706,"line":804},[704,5799,778],{"class":777},[704,5801,782],{"class":781},[704,5803,834],{"class":785},[704,5805,826],{"class":781},[704,5807,5808],{"class":785}," setIdentity",[704,5810,826],{"class":781},[704,5812,5813],{"class":785}," clearIdentity",[704,5815,789],{"class":781},[704,5817,792],{"class":777},[704,5819,795],{"class":781},[704,5821,5608],{"class":713},[704,5823,801],{"class":781},[704,5825,5826],{"class":706,"line":811},[704,5827,808],{"emptyLinePlaceholder":807},[704,5829,5830,5832,5834,5837,5839,5841,5843,5845,5847,5849,5851,5853,5855,5858,5860,5862],{"class":706,"line":857},[704,5831,814],{"class":777},[704,5833,4293],{"class":817},[704,5835,5836],{"class":848}," Dashboard",[704,5838,5629],{"class":781},[704,5840,2541],{"class":2524},[704,5842,5635],{"class":781},[704,5844,782],{"class":781},[704,5846,2541],{"class":860},[704,5848,864],{"class":781},[704,5850,782],{"class":781},[704,5852,2914],{"class":860},[704,5854,864],{"class":781},[704,5856,5857],{"class":710}," string",[704,5859,789],{"class":781},[704,5861,5652],{"class":781},[704,5863,948],{"class":781},[704,5865,5866],{"class":706,"line":878},[704,5867,5868],{"class":1566},"  \u002F\u002F Set identity once - all subsequent logs include it\n",[704,5870,5871,5874,5876,5878,5880],{"class":706,"line":997},[704,5872,5873],{"class":848},"  useEffect",[704,5875,851],{"class":860},[704,5877,1336],{"class":781},[704,5879,945],{"class":817},[704,5881,948],{"class":781},[704,5883,5884,5887,5889,5891,5894,5896,5898,5900,5903,5905],{"class":706,"line":1031},[704,5885,5886],{"class":848},"    setIdentity",[704,5888,851],{"class":860},[704,5890,978],{"class":781},[704,5892,5893],{"class":860}," userId",[704,5895,864],{"class":781},[704,5897,2541],{"class":785},[704,5899,970],{"class":781},[704,5901,5902],{"class":785},"id",[704,5904,789],{"class":781},[704,5906,883],{"class":860},[704,5908,5909,5912,5914,5916,5918],{"class":706,"line":1521},[704,5910,5911],{"class":777},"    return",[704,5913,942],{"class":781},[704,5915,945],{"class":817},[704,5917,5813],{"class":848},[704,5919,962],{"class":860},[704,5921,5922,5925,5927,5929,5931,5933],{"class":706,"line":1529},[704,5923,5924],{"class":781},"  },",[704,5926,1882],{"class":860},[704,5928,2556],{"class":785},[704,5930,970],{"class":781},[704,5932,5902],{"class":785},[704,5934,5935],{"class":860},"])\n",[704,5937,5938],{"class":706,"line":1534},[704,5939,808],{"emptyLinePlaceholder":807},[704,5941,5942,5944],{"class":706,"line":1541},[704,5943,1000],{"class":777},[704,5945,5661],{"class":860},[704,5947,5948,5950,5953,5956,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5980,5982,5984,5987,5989,5991,5994,5996,5998,6000],{"class":706,"line":1553},[704,5949,5666],{"class":781},[704,5951,5952],{"class":860},"button",[704,5954,5955],{"class":817}," onClick",[704,5957,5958],{"class":781},"={()",[704,5960,945],{"class":817},[704,5962,834],{"class":785},[704,5964,970],{"class":781},[704,5966,1058],{"class":848},[704,5968,851],{"class":785},[704,5970,978],{"class":781},[704,5972,981],{"class":860},[704,5974,864],{"class":781},[704,5976,795],{"class":781},[704,5978,5979],{"class":713},"export_clicked",[704,5981,872],{"class":781},[704,5983,826],{"class":781},[704,5985,5986],{"class":860}," format",[704,5988,864],{"class":781},[704,5990,795],{"class":781},[704,5992,5993],{"class":713},"csv",[704,5995,872],{"class":781},[704,5997,789],{"class":781},[704,5999,2528],{"class":785},[704,6001,6002],{"class":781},"}>\n",[704,6004,6005],{"class":706,"line":1563},[704,6006,6007],{"class":785},"      Export\n",[704,6009,6010,6012,6014],{"class":706,"line":1570},[704,6011,5759],{"class":781},[704,6013,5952],{"class":860},[704,6015,5684],{"class":781},[704,6017,6018],{"class":706,"line":1576},[704,6019,5768],{"class":860},[704,6021,6022],{"class":706,"line":1588},[704,6023,4075],{"class":781},[682,6025,6027],{"id":6026},"http-drain","HTTP drain",[618,6029,6030,6031,6033],{},"For advanced use cases, send structured ",[622,6032,2098],{}," events directly from the browser to a custom endpoint:",[694,6035,6038],{"className":767,"code":6036,"filename":6037,"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,6039,6040,6060,6064,6078,6100,6133,6139,6143,6150],{"__ignoreMap":700},[704,6041,6042,6044,6046,6049,6051,6053,6055,6058],{"class":706,"line":707},[704,6043,778],{"class":777},[704,6045,782],{"class":781},[704,6047,6048],{"class":785}," createHttpLogDrain",[704,6050,789],{"class":781},[704,6052,792],{"class":777},[704,6054,795],{"class":781},[704,6056,6057],{"class":713},"evlog\u002Fhttp",[704,6059,801],{"class":781},[704,6061,6062],{"class":706,"line":804},[704,6063,808],{"emptyLinePlaceholder":807},[704,6065,6066,6068,6070,6072,6074,6076],{"class":706,"line":811},[704,6067,2053],{"class":817},[704,6069,2153],{"class":785},[704,6071,932],{"class":781},[704,6073,6048],{"class":848},[704,6075,851],{"class":785},[704,6077,854],{"class":781},[704,6079,6080,6082,6084,6086,6089,6091,6093,6096,6098],{"class":706,"line":857},[704,6081,1329],{"class":860},[704,6083,864],{"class":781},[704,6085,782],{"class":781},[704,6087,6088],{"class":860}," endpoint",[704,6090,864],{"class":781},[704,6092,795],{"class":781},[704,6094,6095],{"class":713},"\u002Fapi\u002Fevlog\u002Fhttp-ingest",[704,6097,872],{"class":781},[704,6099,2306],{"class":781},[704,6101,6102,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131],{"class":706,"line":878},[704,6103,6104],{"class":860},"  pipeline",[704,6106,864],{"class":781},[704,6108,782],{"class":781},[704,6110,2108],{"class":860},[704,6112,864],{"class":781},[704,6114,782],{"class":781},[704,6116,2115],{"class":860},[704,6118,864],{"class":781},[704,6120,2303],{"class":2120},[704,6122,826],{"class":781},[704,6124,2126],{"class":860},[704,6126,864],{"class":781},[704,6128,2131],{"class":2120},[704,6130,789],{"class":781},[704,6132,2306],{"class":781},[704,6134,6135,6137],{"class":706,"line":997},[704,6136,842],{"class":781},[704,6138,883],{"class":785},[704,6140,6141],{"class":706,"line":1031},[704,6142,808],{"emptyLinePlaceholder":807},[704,6144,6145,6147],{"class":706,"line":1521},[704,6146,1100],{"class":848},[704,6148,6149],{"class":785},"(drainEvent)\n",[704,6151,6152,6155,6158,6160,6163],{"class":706,"line":1529},[704,6153,6154],{"class":777},"await",[704,6156,6157],{"class":785}," drain",[704,6159,970],{"class":781},[704,6161,6162],{"class":848},"flush",[704,6164,962],{"class":785},[618,6166,6167],{},"The server endpoint receives batched events:",[694,6169,6172],{"className":767,"code":6170,"filename":6171,"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,6173,6174,6197,6216,6221,6248],{"__ignoreMap":700},[704,6175,6176,6178,6180,6182,6185,6187,6189,6191,6193,6195],{"class":706,"line":707},[704,6177,814],{"class":777},[704,6179,3362],{"class":817},[704,6181,4293],{"class":817},[704,6183,6184],{"class":848}," POST",[704,6186,851],{"class":781},[704,6188,2838],{"class":2524},[704,6190,864],{"class":781},[704,6192,2843],{"class":710},[704,6194,2528],{"class":781},[704,6196,948],{"class":781},[704,6198,6199,6201,6204,6206,6208,6210,6212,6214],{"class":706,"line":804},[704,6200,953],{"class":817},[704,6202,6203],{"class":785}," events",[704,6205,845],{"class":781},[704,6207,1445],{"class":777},[704,6209,2875],{"class":785},[704,6211,970],{"class":781},[704,6213,1008],{"class":848},[704,6215,962],{"class":860},[704,6217,6218],{"class":706,"line":811},[704,6219,6220],{"class":1566},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[704,6222,6223,6225,6228,6230,6232,6235,6237,6239,6241,6244,6246],{"class":706,"line":857},[704,6224,1000],{"class":777},[704,6226,6227],{"class":781}," new",[704,6229,1003],{"class":848},[704,6231,851],{"class":860},[704,6233,6234],{"class":781},"null,",[704,6236,782],{"class":781},[704,6238,2326],{"class":860},[704,6240,864],{"class":781},[704,6242,6243],{"class":2120}," 204",[704,6245,789],{"class":781},[704,6247,883],{"class":860},[704,6249,6250],{"class":706,"line":878},[704,6251,4075],{"class":781},[682,6253,6255],{"id":6254},"run-locally","Run Locally",[694,6257,6260],{"className":696,"code":6258,"filename":6259,"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,6261,6262,6273,6281,6288],{"__ignoreMap":700},[704,6263,6264,6267,6270],{"class":706,"line":707},[704,6265,6266],{"class":710},"git",[704,6268,6269],{"class":713}," clone",[704,6271,6272],{"class":713}," https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog.git\n",[704,6274,6275,6278],{"class":706,"line":804},[704,6276,6277],{"class":848},"cd",[704,6279,6280],{"class":713}," evlog\u002Fexamples\u002Fnextjs\n",[704,6282,6283,6285],{"class":706,"line":811},[704,6284,698],{"class":710},[704,6286,6287],{"class":713}," install\n",[704,6289,6290,6292,6295],{"class":706,"line":857},[704,6291,698],{"class":710},[704,6293,6294],{"class":713}," run",[704,6296,6297],{"class":713}," dev\n",[618,6299,6300,6301,6305],{},"Open ",[671,6302,6303],{"href":6303,"rel":6304},"http:\u002F\u002Flocalhost:3000",[675]," to explore the example.",[6307,6308,6309],"card-group",{},[6310,6311,6315],"card",{"icon":6312,"title":6313,"to":6314},"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,6317,6319],{"id":6318},"next-steps","Next Steps",[618,6321,6322,6323,6325],{},"Deepen your ",[1067,6324,255],{}," integration:",[643,6327,6328,6333,6338,6343],{},[646,6329,6330,6332],{},[671,6331,51],{"href":52},": Design comprehensive events with context layering",[646,6334,6335,6337],{},[671,6336,158],{"href":163},": Send logs to Axiom, Sentry, PostHog, and more",[646,6339,6340,6342],{},[671,6341,66],{"href":67},": Control log volume with head and tail sampling",[646,6344,6345,6347,6348,1640,6350,3465,6352,6354],{},[671,6346,56],{"href":57},": Throw errors with ",[622,6349,3461],{},[622,6351,3464],{},[622,6353,3468],{}," fields",[6356,6357,6358],"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":6360},[6361,6366,6372,6373,6374,6376,6379,6382,6383,6384,6385,6386,6387,6388,6389],{"id":684,"depth":804,"text":25,"children":6362},[6363,6364,6365],{"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":6367},[6368,6369,6370,6371],{"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":6375},"Background work (log.fork)",{"id":3450,"depth":804,"text":3451,"children":6377},[6378],{"id":4232,"depth":811,"text":4233},{"id":4563,"depth":804,"text":557,"children":6380},[6381],{"id":4791,"depth":811,"text":4792},{"id":5070,"depth":804,"text":5071},{"id":5307,"depth":804,"text":384},{"id":5420,"depth":804,"text":5421},{"id":5576,"depth":804,"text":5577},{"id":5775,"depth":804,"text":337},{"id":6026,"depth":804,"text":6027},{"id":6254,"depth":804,"text":6255},{"id":6318,"depth":804,"text":6319},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.","md",[6393],{"label":6313,"icon":6312,"to":6314,"color":2756,"variant":6394},"subtle",{},{"title":255,"icon":258},{"title":255,"description":6390},"eL7aWhFhXWp7i9jyUF2BrIRMPHF2JiYdZnUetA8LpJc",[6400,6402],{"title":250,"path":251,"stem":252,"description":6401,"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":6403,"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.",1791634060039]