[{"data":1,"prerenderedAt":6125},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nextjs":612,"-integrate-frameworks-nextjs-surround":6120},[4,35,85,138,318,453,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],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"path":455,"stem":456,"children":457,"page":34},"Libraries","\u002Flibraries","6.libraries",[458,462,467,470,474,479,484],{"title":41,"path":459,"stem":460,"icon":461},"\u002Flibraries\u002Foverview","6.libraries\u002F0.overview","i-lucide-package",{"title":463,"path":464,"stem":465,"icon":466},"Emitting Events","\u002Flibraries\u002Femitting","6.libraries\u002F1.emitting","i-lucide-radio",{"title":56,"path":468,"stem":469,"icon":59},"\u002Flibraries\u002Ferrors","6.libraries\u002F2.errors",{"title":471,"path":472,"stem":473,"icon":132},"Errors Agents Can Act On","\u002Flibraries\u002Fagents","6.libraries\u002F3.agents",{"title":475,"path":476,"stem":477,"icon":478},"Exporting the Catalog","\u002Flibraries\u002Fexporting","6.libraries\u002F4.exporting","i-lucide-file-output",{"title":480,"path":481,"stem":482,"icon":483},"Migrating","\u002Flibraries\u002Fmigrating","6.libraries\u002F5.migrating","i-lucide-route",{"title":485,"path":486,"stem":487,"icon":488},"Testing","\u002Flibraries\u002Ftesting","6.libraries\u002F6.testing","i-lucide-flask-conical",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","7.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","7.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","7.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","7.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","7.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","7.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","7.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","7.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","7.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","7.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","7.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","7.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","7.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","8.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","8.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","8.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":562,"stem":563,"icon":112},"\u002Freference\u002Fperformance","8.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","8.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","8.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","8.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","8.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","8.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","9.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","9.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","9.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","9.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","9.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","9.compare\u002F5.consola",{"id":613,"title":245,"body":614,"description":6111,"extension":6112,"links":6113,"meta":6116,"navigation":6117,"path":246,"seo":6118,"stem":247,"__hash__":6119},"docs\u002F4.integrate\u002Fframeworks\u002F02.nextjs.md",{"type":615,"value":616,"toc":6082},"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,2755,2780,2783,2786,3164,3167,3247,3254,3273,3449,3453,3471,3942,3951,4077,4080,4231,4235,4248,4549,4562,4565,4581,4587,4790,4794,4797,5022,5027,5030,5043,5128,5141,5145,5150,5297,5301,5308,5496,5499,5505,5747,5751,5757,5888,5891,5975,5979,6021,6029,6039,6043,6049,6078],[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":248},"[\"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,2184,2206,2213,2218,2251,2266,2271,2277,2287,2308,2319,2339,2357,2379,2387,2392,2397,2403,2413,2442,2469,2496,2501,2506,2512,2534,2580,2611,2616,2621,2627,2645,2675,2704,2731,2736,2741,2748],{"__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,2180,2182],{"class":706,"line":1576},[704,2171,2172],{"class":860},"  dataset",[704,2174,864],{"class":781},[704,2176,795],{"class":781},[704,2178,2179],{"class":713},"logs",[704,2181,872],{"class":781},[704,2183,875],{"class":781},[704,2185,2186,2189,2191,2194,2196,2198,2200,2203],{"class":706,"line":1588},[704,2187,2188],{"class":860},"  apiKey",[704,2190,864],{"class":781},[704,2192,2193],{"class":785}," process",[704,2195,970],{"class":781},[704,2197,1705],{"class":785},[704,2199,970],{"class":781},[704,2201,2202],{"class":785},"AXIOM_API_KEY",[704,2204,2205],{"class":781},"!,\n",[704,2207,2208,2210],{"class":706,"line":1594},[704,2209,842],{"class":781},[704,2211,2212],{"class":785},"))\n",[704,2214,2216],{"class":706,"line":2215},18,[704,2217,808],{"emptyLinePlaceholder":807},[704,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249],{"class":706,"line":2220},19,[704,2222,814],{"class":777},[704,2224,818],{"class":817},[704,2226,782],{"class":781},[704,2228,823],{"class":785},[704,2230,826],{"class":781},[704,2232,829],{"class":785},[704,2234,826],{"class":781},[704,2236,834],{"class":785},[704,2238,826],{"class":781},[704,2240,839],{"class":785},[704,2242,842],{"class":781},[704,2244,845],{"class":781},[704,2246,786],{"class":848},[704,2248,851],{"class":785},[704,2250,854],{"class":781},[704,2252,2254,2256,2258,2260,2262,2264],{"class":706,"line":2253},20,[704,2255,861],{"class":860},[704,2257,864],{"class":781},[704,2259,795],{"class":781},[704,2261,869],{"class":713},[704,2263,872],{"class":781},[704,2265,875],{"class":781},[704,2267,2269],{"class":706,"line":2268},21,[704,2270,808],{"emptyLinePlaceholder":807},[704,2272,2274],{"class":706,"line":2273},22,[704,2275,2276],{"class":1566},"  \u002F\u002F 4. Head sampling - keep 10% of info logs\n",[704,2278,2280,2283,2285],{"class":706,"line":2279},23,[704,2281,2282],{"class":860},"  sampling",[704,2284,864],{"class":781},[704,2286,948],{"class":781},[704,2288,2290,2293,2295,2297,2300,2302,2305],{"class":706,"line":2289},24,[704,2291,2292],{"class":860},"    rates",[704,2294,864],{"class":781},[704,2296,782],{"class":781},[704,2298,2299],{"class":860}," info",[704,2301,864],{"class":781},[704,2303,2304],{"class":2120}," 10",[704,2306,2307],{"class":781}," },\n",[704,2309,2311,2314,2316],{"class":706,"line":2310},25,[704,2312,2313],{"class":860},"    keep",[704,2315,864],{"class":781},[704,2317,2318],{"class":785}," [\n",[704,2320,2322,2325,2328,2330,2333,2336],{"class":706,"line":2321},26,[704,2323,2324],{"class":781},"      {",[704,2326,2327],{"class":860}," status",[704,2329,864],{"class":781},[704,2331,2332],{"class":2120}," 400",[704,2334,2335],{"class":781}," },",[704,2337,2338],{"class":1566},"              \u002F\u002F Always keep errors\n",[704,2340,2342,2344,2347,2349,2352,2354],{"class":706,"line":2341},27,[704,2343,2324],{"class":781},[704,2345,2346],{"class":860}," duration",[704,2348,864],{"class":781},[704,2350,2351],{"class":2120}," 1000",[704,2353,2335],{"class":781},[704,2355,2356],{"class":1566},"           \u002F\u002F Always keep slow requests\n",[704,2358,2360,2362,2365,2367,2369,2372,2374,2376],{"class":706,"line":2359},28,[704,2361,2324],{"class":781},[704,2363,2364],{"class":860}," path",[704,2366,864],{"class":781},[704,2368,795],{"class":781},[704,2370,2371],{"class":713},"\u002Fapi\u002Fcritical\u002F**",[704,2373,872],{"class":781},[704,2375,2335],{"class":781},[704,2377,2378],{"class":1566}," \u002F\u002F Always keep critical paths\n",[704,2380,2382,2385],{"class":706,"line":2381},29,[704,2383,2384],{"class":785},"    ]",[704,2386,875],{"class":781},[704,2388,2390],{"class":706,"line":2389},30,[704,2391,1909],{"class":781},[704,2393,2395],{"class":706,"line":2394},31,[704,2396,808],{"emptyLinePlaceholder":807},[704,2398,2400],{"class":706,"line":2399},32,[704,2401,2402],{"class":1566},"  \u002F\u002F 5. Route-based service names\n",[704,2404,2406,2409,2411],{"class":706,"line":2405},33,[704,2407,2408],{"class":860},"  routes",[704,2410,864],{"class":781},[704,2412,948],{"class":781},[704,2414,2416,2419,2422,2424,2426,2428,2431,2433,2435,2438,2440],{"class":706,"line":2415},34,[704,2417,2418],{"class":781},"    '",[704,2420,2421],{"class":860},"\u002Fapi\u002Fauth\u002F**",[704,2423,872],{"class":781},[704,2425,864],{"class":781},[704,2427,782],{"class":781},[704,2429,2430],{"class":860}," service",[704,2432,864],{"class":781},[704,2434,795],{"class":781},[704,2436,2437],{"class":713},"auth-service",[704,2439,872],{"class":781},[704,2441,2307],{"class":781},[704,2443,2445,2447,2450,2452,2454,2456,2458,2460,2462,2465,2467],{"class":706,"line":2444},35,[704,2446,2418],{"class":781},[704,2448,2449],{"class":860},"\u002Fapi\u002Fpayment\u002F**",[704,2451,872],{"class":781},[704,2453,864],{"class":781},[704,2455,782],{"class":781},[704,2457,2430],{"class":860},[704,2459,864],{"class":781},[704,2461,795],{"class":781},[704,2463,2464],{"class":713},"payment-service",[704,2466,872],{"class":781},[704,2468,2307],{"class":781},[704,2470,2472,2474,2477,2479,2481,2483,2485,2487,2489,2492,2494],{"class":706,"line":2471},36,[704,2473,2418],{"class":781},[704,2475,2476],{"class":860},"\u002Fapi\u002Fbooking\u002F**",[704,2478,872],{"class":781},[704,2480,864],{"class":781},[704,2482,782],{"class":781},[704,2484,2430],{"class":860},[704,2486,864],{"class":781},[704,2488,795],{"class":781},[704,2490,2491],{"class":713},"booking-service",[704,2493,872],{"class":781},[704,2495,2307],{"class":781},[704,2497,2499],{"class":706,"line":2498},37,[704,2500,1909],{"class":781},[704,2502,2504],{"class":706,"line":2503},38,[704,2505,808],{"emptyLinePlaceholder":807},[704,2507,2509],{"class":706,"line":2508},39,[704,2510,2511],{"class":1566},"  \u002F\u002F 6. Custom tail sampling - business logic\n",[704,2513,2515,2518,2520,2523,2527,2530,2532],{"class":706,"line":2514},40,[704,2516,2517],{"class":848},"  keep",[704,2519,864],{"class":781},[704,2521,2522],{"class":781}," (",[704,2524,2526],{"class":2525},"sHdIc","ctx",[704,2528,2529],{"class":781},")",[704,2531,945],{"class":817},[704,2533,948],{"class":781},[704,2535,2537,2540,2543,2545,2548,2550,2553,2555,2558,2561,2563,2566,2569,2572,2574,2577],{"class":706,"line":2536},41,[704,2538,2539],{"class":817},"    const",[704,2541,2542],{"class":785}," user",[704,2544,845],{"class":781},[704,2546,2547],{"class":785}," ctx",[704,2549,970],{"class":781},[704,2551,2552],{"class":785},"context",[704,2554,970],{"class":781},[704,2556,2557],{"class":785},"user",[704,2559,2560],{"class":777}," as",[704,2562,782],{"class":781},[704,2564,2565],{"class":860}," premium",[704,2567,2568],{"class":781},"?:",[704,2570,2571],{"class":710}," boolean",[704,2573,789],{"class":781},[704,2575,2576],{"class":781}," |",[704,2578,2579],{"class":710}," undefined\n",[704,2581,2583,2586,2588,2590,2593,2596,2599,2601,2603,2606,2608],{"class":706,"line":2582},42,[704,2584,2585],{"class":777},"    if",[704,2587,2522],{"class":860},[704,2589,2557],{"class":785},[704,2591,2592],{"class":781},"?.",[704,2594,2595],{"class":785},"premium",[704,2597,2598],{"class":860},") ",[704,2600,2526],{"class":785},[704,2602,970],{"class":781},[704,2604,2605],{"class":785},"shouldKeep",[704,2607,845],{"class":781},[704,2609,2610],{"class":1223}," true\n",[704,2612,2614],{"class":706,"line":2613},43,[704,2615,1909],{"class":781},[704,2617,2619],{"class":706,"line":2618},44,[704,2620,808],{"emptyLinePlaceholder":807},[704,2622,2624],{"class":706,"line":2623},45,[704,2625,2626],{"class":1566},"  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n",[704,2628,2630,2633,2635,2637,2639,2641,2643],{"class":706,"line":2629},46,[704,2631,2632],{"class":848},"  enrich",[704,2634,864],{"class":781},[704,2636,2522],{"class":781},[704,2638,2526],{"class":2525},[704,2640,2529],{"class":781},[704,2642,945],{"class":817},[704,2644,948],{"class":781},[704,2646,2648,2651,2653,2655,2658,2661,2664,2666,2669,2671,2673],{"class":706,"line":2647},47,[704,2649,2650],{"class":777},"    for",[704,2652,2522],{"class":860},[704,2654,2053],{"class":817},[704,2656,2657],{"class":785}," enricher",[704,2659,2660],{"class":781}," of",[704,2662,2663],{"class":785}," enrichers",[704,2665,2598],{"class":860},[704,2667,2668],{"class":848},"enricher",[704,2670,851],{"class":860},[704,2672,2526],{"class":785},[704,2674,883],{"class":860},[704,2676,2678,2681,2683,2686,2688,2691,2693,2695,2697,2699,2701],{"class":706,"line":2677},48,[704,2679,2680],{"class":785},"    ctx",[704,2682,970],{"class":781},[704,2684,2685],{"class":785},"event",[704,2687,970],{"class":781},[704,2689,2690],{"class":785},"deploymentId",[704,2692,845],{"class":781},[704,2694,2193],{"class":785},[704,2696,970],{"class":781},[704,2698,1705],{"class":785},[704,2700,970],{"class":781},[704,2702,2703],{"class":785},"VERCEL_DEPLOYMENT_ID\n",[704,2705,2707,2709,2711,2713,2715,2718,2720,2722,2724,2726,2728],{"class":706,"line":2706},49,[704,2708,2680],{"class":785},[704,2710,970],{"class":781},[704,2712,2685],{"class":785},[704,2714,970],{"class":781},[704,2716,2717],{"class":785},"region",[704,2719,845],{"class":781},[704,2721,2193],{"class":785},[704,2723,970],{"class":781},[704,2725,1705],{"class":785},[704,2727,970],{"class":781},[704,2729,2730],{"class":785},"VERCEL_REGION\n",[704,2732,2734],{"class":706,"line":2733},50,[704,2735,1909],{"class":781},[704,2737,2739],{"class":706,"line":2738},51,[704,2740,808],{"emptyLinePlaceholder":807},[704,2742,2744,2746],{"class":706,"line":2743},52,[704,2745,1329],{"class":785},[704,2747,875],{"class":781},[704,2749,2751,2753],{"class":706,"line":2750},53,[704,2752,842],{"class":781},[704,2754,883],{"class":785},[1056,2756,2759,2760,2763,2764,2767,2768,2771,2772,2775,2776,2779],{"color":2757,"icon":2758},"neutral","i-lucide-cloud","On Vercel, ",[622,2761,2762],{},"withEvlog"," registers drain work with Next's ",[622,2765,2766],{},"after()",", and with a pipeline it also registers ",[622,2769,2770],{},"drain.settled()",": the function stays alive until the buffered batch is delivered, or dropped once retries are exhausted. ",[622,2773,2774],{},"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,2777,2778],{},"createAxiomDrain({ timeout: 15000 })","): a timed-out request that actually landed gets retried, and non-idempotent ingest APIs count that twice.",[682,2781,51],{"id":2782},"wide-events",[618,2784,2785],{},"Build up context progressively through your handler. One request = one wide event:",[694,2787,2790],{"className":767,"code":2788,"filename":2789,"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,2791,2792,2814,2818,2851,2863,2883,2887,2892,2904,2941,2947,2951,2956,2968,3024,3030,3034,3039,3060,3072,3109,3115,3119,3158],{"__ignoreMap":700},[704,2793,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812],{"class":706,"line":707},[704,2795,778],{"class":777},[704,2797,782],{"class":781},[704,2799,823],{"class":785},[704,2801,826],{"class":781},[704,2803,829],{"class":785},[704,2805,789],{"class":781},[704,2807,792],{"class":777},[704,2809,795],{"class":781},[704,2811,914],{"class":713},[704,2813,801],{"class":781},[704,2815,2816],{"class":706,"line":804},[704,2817,808],{"emptyLinePlaceholder":807},[704,2819,2820,2822,2824,2827,2829,2831,2833,2835,2837,2840,2842,2845,2847,2849],{"class":706,"line":811},[704,2821,814],{"class":777},[704,2823,818],{"class":817},[704,2825,2826],{"class":785}," POST ",[704,2828,932],{"class":781},[704,2830,823],{"class":848},[704,2832,851],{"class":785},[704,2834,939],{"class":817},[704,2836,2522],{"class":781},[704,2838,2839],{"class":2525},"request",[704,2841,864],{"class":781},[704,2843,2844],{"class":710}," Request",[704,2846,2529],{"class":781},[704,2848,945],{"class":817},[704,2850,948],{"class":781},[704,2852,2853,2855,2857,2859,2861],{"class":706,"line":857},[704,2854,953],{"class":817},[704,2856,834],{"class":785},[704,2858,845],{"class":781},[704,2860,829],{"class":848},[704,2862,962],{"class":860},[704,2864,2865,2867,2870,2872,2874,2877,2879,2881],{"class":706,"line":878},[704,2866,953],{"class":817},[704,2868,2869],{"class":785}," body",[704,2871,845],{"class":781},[704,2873,1445],{"class":777},[704,2875,2876],{"class":785}," request",[704,2878,970],{"class":781},[704,2880,1008],{"class":848},[704,2882,962],{"class":860},[704,2884,2885],{"class":706,"line":997},[704,2886,808],{"emptyLinePlaceholder":807},[704,2888,2889],{"class":706,"line":1031},[704,2890,2891],{"class":1566},"  \u002F\u002F Stage 1: User context\n",[704,2893,2894,2896,2898,2900,2902],{"class":706,"line":1521},[704,2895,967],{"class":785},[704,2897,970],{"class":781},[704,2899,973],{"class":848},[704,2901,851],{"class":860},[704,2903,854],{"class":781},[704,2905,2906,2909,2911,2913,2916,2918,2920,2922,2925,2927,2930,2932,2934,2937,2939],{"class":706,"line":1529},[704,2907,2908],{"class":860},"    user",[704,2910,864],{"class":781},[704,2912,782],{"class":781},[704,2914,2915],{"class":860}," id",[704,2917,864],{"class":781},[704,2919,2869],{"class":785},[704,2921,970],{"class":781},[704,2923,2924],{"class":785},"userId",[704,2926,826],{"class":781},[704,2928,2929],{"class":860}," plan",[704,2931,864],{"class":781},[704,2933,795],{"class":781},[704,2935,2936],{"class":713},"enterprise",[704,2938,872],{"class":781},[704,2940,2307],{"class":781},[704,2942,2943,2945],{"class":706,"line":1534},[704,2944,1524],{"class":781},[704,2946,883],{"class":860},[704,2948,2949],{"class":706,"line":1541},[704,2950,808],{"emptyLinePlaceholder":807},[704,2952,2953],{"class":706,"line":1553},[704,2954,2955],{"class":1566},"  \u002F\u002F Stage 2: Cart context\n",[704,2957,2958,2960,2962,2964,2966],{"class":706,"line":1563},[704,2959,967],{"class":785},[704,2961,970],{"class":781},[704,2963,973],{"class":848},[704,2965,851],{"class":860},[704,2967,854],{"class":781},[704,2969,2970,2973,2975,2977,2980,2982,2984,2986,2989,2991,2994,2996,2999,3001,3003,3005,3008,3010,3013,3015,3017,3020,3022],{"class":706,"line":1570},[704,2971,2972],{"class":860},"    cart",[704,2974,864],{"class":781},[704,2976,782],{"class":781},[704,2978,2979],{"class":860}," items",[704,2981,864],{"class":781},[704,2983,2869],{"class":785},[704,2985,970],{"class":781},[704,2987,2988],{"class":785},"items",[704,2990,970],{"class":781},[704,2992,2993],{"class":785},"length",[704,2995,826],{"class":781},[704,2997,2998],{"class":860}," total",[704,3000,864],{"class":781},[704,3002,2869],{"class":785},[704,3004,970],{"class":781},[704,3006,3007],{"class":785},"total",[704,3009,826],{"class":781},[704,3011,3012],{"class":860}," currency",[704,3014,864],{"class":781},[704,3016,795],{"class":781},[704,3018,3019],{"class":713},"USD",[704,3021,872],{"class":781},[704,3023,2307],{"class":781},[704,3025,3026,3028],{"class":706,"line":1576},[704,3027,1524],{"class":781},[704,3029,883],{"class":860},[704,3031,3032],{"class":706,"line":1588},[704,3033,808],{"emptyLinePlaceholder":807},[704,3035,3036],{"class":706,"line":1594},[704,3037,3038],{"class":1566},"  \u002F\u002F Stage 3: Payment context\n",[704,3040,3041,3043,3046,3048,3050,3053,3055,3058],{"class":706,"line":2215},[704,3042,953],{"class":817},[704,3044,3045],{"class":785}," payment",[704,3047,845],{"class":781},[704,3049,1445],{"class":777},[704,3051,3052],{"class":848}," processPayment",[704,3054,851],{"class":860},[704,3056,3057],{"class":785},"body",[704,3059,883],{"class":860},[704,3061,3062,3064,3066,3068,3070],{"class":706,"line":2220},[704,3063,967],{"class":785},[704,3065,970],{"class":781},[704,3067,973],{"class":848},[704,3069,851],{"class":860},[704,3071,854],{"class":781},[704,3073,3074,3077,3079,3081,3084,3086,3088,3090,3093,3095,3098,3100,3102,3104,3107],{"class":706,"line":2253},[704,3075,3076],{"class":860},"    payment",[704,3078,864],{"class":781},[704,3080,782],{"class":781},[704,3082,3083],{"class":860}," method",[704,3085,864],{"class":781},[704,3087,3045],{"class":785},[704,3089,970],{"class":781},[704,3091,3092],{"class":785},"method",[704,3094,826],{"class":781},[704,3096,3097],{"class":860}," cardLast4",[704,3099,864],{"class":781},[704,3101,3045],{"class":785},[704,3103,970],{"class":781},[704,3105,3106],{"class":785},"last4",[704,3108,2307],{"class":781},[704,3110,3111,3113],{"class":706,"line":2268},[704,3112,1524],{"class":781},[704,3114,883],{"class":860},[704,3116,3117],{"class":706,"line":2273},[704,3118,808],{"emptyLinePlaceholder":807},[704,3120,3121,3123,3125,3127,3129,3131,3133,3136,3138,3140,3142,3145,3147,3149,3151,3154,3156],{"class":706,"line":2279},[704,3122,1000],{"class":777},[704,3124,1003],{"class":785},[704,3126,970],{"class":781},[704,3128,1008],{"class":848},[704,3130,851],{"class":860},[704,3132,978],{"class":781},[704,3134,3135],{"class":860}," success",[704,3137,864],{"class":781},[704,3139,1224],{"class":1223},[704,3141,826],{"class":781},[704,3143,3144],{"class":860}," orderId",[704,3146,864],{"class":781},[704,3148,3045],{"class":785},[704,3150,970],{"class":781},[704,3152,3153],{"class":785},"orderId",[704,3155,789],{"class":781},[704,3157,883],{"class":860},[704,3159,3160,3162],{"class":706,"line":2289},[704,3161,842],{"class":781},[704,3163,883],{"class":785},[618,3165,3166],{},"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,3168,3171],{"className":696,"code":3169,"filename":3170,"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,3172,3173,3184,3198,3220,3236],{"__ignoreMap":700},[704,3174,3175,3178,3181],{"class":706,"line":707},[704,3176,3177],{"class":710},"10:23:45.612",[704,3179,3180],{"class":713}," INFO",[704,3182,3183],{"class":785}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[704,3185,3186,3189,3192,3195],{"class":706,"line":804},[704,3187,3188],{"class":710},"  ├─",[704,3190,3191],{"class":713}," user:",[704,3193,3194],{"class":713}," id=usr_123",[704,3196,3197],{"class":713}," plan=enterprise\n",[704,3199,3200,3202,3205,3208,3211,3214,3217],{"class":706,"line":811},[704,3201,3188],{"class":710},[704,3203,3204],{"class":713}," cart:",[704,3206,3207],{"class":713}," items=",[704,3209,3210],{"class":2120},"3",[704,3212,3213],{"class":713}," total=",[704,3215,3216],{"class":2120},"14999",[704,3218,3219],{"class":713}," currency=USD\n",[704,3221,3222,3224,3227,3230,3233],{"class":706,"line":857},[704,3223,3188],{"class":710},[704,3225,3226],{"class":713}," payment:",[704,3228,3229],{"class":713}," method=card",[704,3231,3232],{"class":713}," cardLast4=",[704,3234,3235],{"class":2120},"4242\n",[704,3237,3238,3241,3244],{"class":706,"line":878},[704,3239,3240],{"class":710},"  └─",[704,3242,3243],{"class":713}," requestId:",[704,3245,3246],{"class":713}," a1b2c3d4-...\n",[682,3248,3250,3251,2529],{"id":3249},"background-work-logfork","Background work (",[622,3252,3253],{},"log.fork",[618,3255,3256,3257,1640,3259,3261,3262,3267,3268,3272],{},"Inside ",[622,3258,2762],{},[622,3260,632],{}," returns a logger with ",[1067,3263,3264],{},[622,3265,3266],{},"fork"," for child wide events. See ",[671,3269,3271],{"href":3270},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","After emit"," in Wide events.",[694,3274,3277],{"className":767,"code":3275,"filename":3276,"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,3278,3279,3301,3305,3327,3339,3370,3383,3412,3418,3443],{"__ignoreMap":700},[704,3280,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299],{"class":706,"line":707},[704,3282,778],{"class":777},[704,3284,782],{"class":781},[704,3286,823],{"class":785},[704,3288,826],{"class":781},[704,3290,829],{"class":785},[704,3292,789],{"class":781},[704,3294,792],{"class":777},[704,3296,795],{"class":781},[704,3298,914],{"class":713},[704,3300,801],{"class":781},[704,3302,3303],{"class":706,"line":804},[704,3304,808],{"emptyLinePlaceholder":807},[704,3306,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325],{"class":706,"line":811},[704,3308,814],{"class":777},[704,3310,818],{"class":817},[704,3312,2826],{"class":785},[704,3314,932],{"class":781},[704,3316,823],{"class":848},[704,3318,851],{"class":785},[704,3320,939],{"class":817},[704,3322,942],{"class":781},[704,3324,945],{"class":817},[704,3326,948],{"class":781},[704,3328,3329,3331,3333,3335,3337],{"class":706,"line":857},[704,3330,953],{"class":817},[704,3332,834],{"class":785},[704,3334,845],{"class":781},[704,3336,829],{"class":848},[704,3338,962],{"class":860},[704,3340,3341,3343,3345,3347,3350,3352,3354,3357,3359,3361,3364,3366,3368],{"class":706,"line":878},[704,3342,967],{"class":785},[704,3344,970],{"class":781},[704,3346,3266],{"class":848},[704,3348,3349],{"class":781},"!",[704,3351,851],{"class":860},[704,3353,872],{"class":781},[704,3355,3356],{"class":713},"enqueue",[704,3358,872],{"class":781},[704,3360,826],{"class":781},[704,3362,3363],{"class":817}," async",[704,3365,942],{"class":781},[704,3367,945],{"class":817},[704,3369,948],{"class":781},[704,3371,3372,3374,3377,3379,3381],{"class":706,"line":997},[704,3373,2539],{"class":817},[704,3375,3376],{"class":785}," child",[704,3378,845],{"class":781},[704,3380,829],{"class":848},[704,3382,962],{"class":860},[704,3384,3385,3388,3390,3392,3394,3396,3399,3401,3403,3406,3408,3410],{"class":706,"line":1031},[704,3386,3387],{"class":785},"    child",[704,3389,970],{"class":781},[704,3391,973],{"class":848},[704,3393,851],{"class":860},[704,3395,978],{"class":781},[704,3397,3398],{"class":860}," job",[704,3400,864],{"class":781},[704,3402,795],{"class":781},[704,3404,3405],{"class":713},"queued",[704,3407,872],{"class":781},[704,3409,789],{"class":781},[704,3411,883],{"class":860},[704,3413,3414,3416],{"class":706,"line":1521},[704,3415,1524],{"class":781},[704,3417,883],{"class":860},[704,3419,3420,3422,3424,3426,3428,3430,3432,3435,3437,3439,3441],{"class":706,"line":1529},[704,3421,1000],{"class":777},[704,3423,1003],{"class":785},[704,3425,970],{"class":781},[704,3427,1008],{"class":848},[704,3429,851],{"class":860},[704,3431,978],{"class":781},[704,3433,3434],{"class":860}," ok",[704,3436,864],{"class":781},[704,3438,1224],{"class":1223},[704,3440,789],{"class":781},[704,3442,883],{"class":860},[704,3444,3445,3447],{"class":706,"line":1534},[704,3446,842],{"class":781},[704,3448,883],{"class":785},[682,3450,3452],{"id":3451},"error-handling","Error Handling",[618,3454,3455,3456,3459,3460,1640,3463,3466,3467,3470],{},"Use ",[622,3457,3458],{},"createError"," for structured errors with ",[622,3461,3462],{},"why",[622,3464,3465],{},"fix",", and ",[622,3468,3469],{},"link"," fields that help developers debug in both logs and API responses:",[1927,3472,3473],{},[694,3474,3477],{"className":767,"code":3475,"filename":3476,"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,3478,3479,3506,3510,3540,3552,3570,3574,3610,3614,3637,3648,3659,3675,3691,3707,3723,3730,3734,3738,3758,3762,3782,3823,3833,3844,3859,3883,3898,3904,3908,3912,3936],{"__ignoreMap":700},[704,3480,3481,3483,3485,3487,3489,3491,3493,3496,3498,3500,3502,3504],{"class":706,"line":707},[704,3482,778],{"class":777},[704,3484,782],{"class":781},[704,3486,823],{"class":785},[704,3488,826],{"class":781},[704,3490,829],{"class":785},[704,3492,826],{"class":781},[704,3494,3495],{"class":785}," createError",[704,3497,789],{"class":781},[704,3499,792],{"class":777},[704,3501,795],{"class":781},[704,3503,914],{"class":713},[704,3505,801],{"class":781},[704,3507,3508],{"class":706,"line":804},[704,3509,808],{"emptyLinePlaceholder":807},[704,3511,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538],{"class":706,"line":811},[704,3513,814],{"class":777},[704,3515,818],{"class":817},[704,3517,2826],{"class":785},[704,3519,932],{"class":781},[704,3521,823],{"class":848},[704,3523,851],{"class":785},[704,3525,939],{"class":817},[704,3527,2522],{"class":781},[704,3529,2839],{"class":2525},[704,3531,864],{"class":781},[704,3533,2844],{"class":710},[704,3535,2529],{"class":781},[704,3537,945],{"class":817},[704,3539,948],{"class":781},[704,3541,3542,3544,3546,3548,3550],{"class":706,"line":857},[704,3543,953],{"class":817},[704,3545,834],{"class":785},[704,3547,845],{"class":781},[704,3549,829],{"class":848},[704,3551,962],{"class":860},[704,3553,3554,3556,3558,3560,3562,3564,3566,3568],{"class":706,"line":878},[704,3555,953],{"class":817},[704,3557,2869],{"class":785},[704,3559,845],{"class":781},[704,3561,1445],{"class":777},[704,3563,2876],{"class":785},[704,3565,970],{"class":781},[704,3567,1008],{"class":848},[704,3569,962],{"class":860},[704,3571,3572],{"class":706,"line":997},[704,3573,808],{"emptyLinePlaceholder":807},[704,3575,3576,3578,3580,3582,3584,3586,3588,3590,3592,3595,3597,3599,3601,3604,3606,3608],{"class":706,"line":1031},[704,3577,967],{"class":785},[704,3579,970],{"class":781},[704,3581,973],{"class":848},[704,3583,851],{"class":860},[704,3585,978],{"class":781},[704,3587,3045],{"class":860},[704,3589,864],{"class":781},[704,3591,782],{"class":781},[704,3593,3594],{"class":860}," amount",[704,3596,864],{"class":781},[704,3598,2869],{"class":785},[704,3600,970],{"class":781},[704,3602,3603],{"class":785},"amount",[704,3605,789],{"class":781},[704,3607,789],{"class":781},[704,3609,883],{"class":860},[704,3611,3612],{"class":706,"line":1521},[704,3613,808],{"emptyLinePlaceholder":807},[704,3615,3616,3619,3621,3623,3625,3627,3630,3633,3635],{"class":706,"line":1529},[704,3617,3618],{"class":777},"  if",[704,3620,2522],{"class":860},[704,3622,3057],{"class":785},[704,3624,970],{"class":781},[704,3626,3603],{"class":785},[704,3628,3629],{"class":781}," \u003C=",[704,3631,3632],{"class":2120}," 0",[704,3634,2598],{"class":860},[704,3636,854],{"class":781},[704,3638,3639,3642,3644,3646],{"class":706,"line":1534},[704,3640,3641],{"class":777},"    throw",[704,3643,3495],{"class":848},[704,3645,851],{"class":860},[704,3647,854],{"class":781},[704,3649,3650,3653,3655,3657],{"class":706,"line":1541},[704,3651,3652],{"class":860},"      status",[704,3654,864],{"class":781},[704,3656,2332],{"class":2120},[704,3658,875],{"class":781},[704,3660,3661,3664,3666,3668,3671,3673],{"class":706,"line":1553},[704,3662,3663],{"class":860},"      message",[704,3665,864],{"class":781},[704,3667,795],{"class":781},[704,3669,3670],{"class":713},"Invalid payment amount",[704,3672,872],{"class":781},[704,3674,875],{"class":781},[704,3676,3677,3680,3682,3684,3687,3689],{"class":706,"line":1563},[704,3678,3679],{"class":860},"      why",[704,3681,864],{"class":781},[704,3683,795],{"class":781},[704,3685,3686],{"class":713},"The amount must be a positive number",[704,3688,872],{"class":781},[704,3690,875],{"class":781},[704,3692,3693,3696,3698,3700,3703,3705],{"class":706,"line":1570},[704,3694,3695],{"class":860},"      fix",[704,3697,864],{"class":781},[704,3699,795],{"class":781},[704,3701,3702],{"class":713},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[704,3704,872],{"class":781},[704,3706,875],{"class":781},[704,3708,3709,3712,3714,3716,3719,3721],{"class":706,"line":1576},[704,3710,3711],{"class":860},"      link",[704,3713,864],{"class":781},[704,3715,795],{"class":781},[704,3717,3718],{"class":713},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[704,3720,872],{"class":781},[704,3722,875],{"class":781},[704,3724,3725,3728],{"class":706,"line":1588},[704,3726,3727],{"class":781},"    }",[704,3729,883],{"class":860},[704,3731,3732],{"class":706,"line":1594},[704,3733,1591],{"class":781},[704,3735,3736],{"class":706,"line":2215},[704,3737,808],{"emptyLinePlaceholder":807},[704,3739,3740,3742,3745,3747,3749,3752,3754,3756],{"class":706,"line":2220},[704,3741,953],{"class":817},[704,3743,3744],{"class":785}," result",[704,3746,845],{"class":781},[704,3748,1445],{"class":777},[704,3750,3751],{"class":848}," chargeCard",[704,3753,851],{"class":860},[704,3755,3057],{"class":785},[704,3757,883],{"class":860},[704,3759,3760],{"class":706,"line":2253},[704,3761,808],{"emptyLinePlaceholder":807},[704,3763,3764,3766,3768,3770,3773,3775,3778,3780],{"class":706,"line":2268},[704,3765,3618],{"class":777},[704,3767,2522],{"class":860},[704,3769,3349],{"class":781},[704,3771,3772],{"class":785},"result",[704,3774,970],{"class":781},[704,3776,3777],{"class":785},"success",[704,3779,2598],{"class":860},[704,3781,854],{"class":781},[704,3783,3784,3787,3789,3792,3794,3797,3800,3802,3805,3808,3811,3813,3815,3818,3821],{"class":706,"line":2273},[704,3785,3786],{"class":785},"    log",[704,3788,970],{"class":781},[704,3790,3791],{"class":848},"error",[704,3793,851],{"class":860},[704,3795,3796],{"class":781},"new",[704,3798,3799],{"class":848}," Error",[704,3801,851],{"class":860},[704,3803,3804],{"class":781},"`",[704,3806,3807],{"class":713},"Payment declined: ",[704,3809,3810],{"class":781},"${",[704,3812,3772],{"class":785},[704,3814,970],{"class":781},[704,3816,3817],{"class":785},"reason",[704,3819,3820],{"class":781},"}`",[704,3822,2212],{"class":860},[704,3824,3825,3827,3829,3831],{"class":706,"line":2279},[704,3826,3641],{"class":777},[704,3828,3495],{"class":848},[704,3830,851],{"class":860},[704,3832,854],{"class":781},[704,3834,3835,3837,3839,3842],{"class":706,"line":2289},[704,3836,3652],{"class":860},[704,3838,864],{"class":781},[704,3840,3841],{"class":2120}," 402",[704,3843,875],{"class":781},[704,3845,3846,3848,3850,3852,3855,3857],{"class":706,"line":2310},[704,3847,3663],{"class":860},[704,3849,864],{"class":781},[704,3851,795],{"class":781},[704,3853,3854],{"class":713},"Payment declined",[704,3856,872],{"class":781},[704,3858,875],{"class":781},[704,3860,3861,3863,3865,3868,3871,3873,3875,3877,3879,3881],{"class":706,"line":2321},[704,3862,3679],{"class":860},[704,3864,864],{"class":781},[704,3866,3867],{"class":781}," `",[704,3869,3870],{"class":713},"Card declined by issuer: ",[704,3872,3810],{"class":781},[704,3874,3772],{"class":785},[704,3876,970],{"class":781},[704,3878,3817],{"class":785},[704,3880,3820],{"class":781},[704,3882,875],{"class":781},[704,3884,3885,3887,3889,3891,3894,3896],{"class":706,"line":2341},[704,3886,3695],{"class":860},[704,3888,864],{"class":781},[704,3890,795],{"class":781},[704,3892,3893],{"class":713},"Try a different payment method or contact your bank",[704,3895,872],{"class":781},[704,3897,875],{"class":781},[704,3899,3900,3902],{"class":706,"line":2359},[704,3901,3727],{"class":781},[704,3903,883],{"class":860},[704,3905,3906],{"class":706,"line":2381},[704,3907,1591],{"class":781},[704,3909,3910],{"class":706,"line":2389},[704,3911,808],{"emptyLinePlaceholder":807},[704,3913,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934],{"class":706,"line":2394},[704,3915,1000],{"class":777},[704,3917,1003],{"class":785},[704,3919,970],{"class":781},[704,3921,1008],{"class":848},[704,3923,851],{"class":860},[704,3925,978],{"class":781},[704,3927,3135],{"class":860},[704,3929,864],{"class":781},[704,3931,1224],{"class":1223},[704,3933,789],{"class":781},[704,3935,883],{"class":860},[704,3937,3938,3940],{"class":706,"line":2399},[704,3939,842],{"class":781},[704,3941,883],{"class":785},[618,3943,3944,3946,3947,3950],{},[622,3945,628],{}," catches ",[622,3948,3949],{},"EvlogError"," and returns a structured JSON response (like Nitro does for Nuxt):",[694,3952,3956],{"className":3953,"code":3954,"filename":3955,"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,3957,3958,3962,3984,4003,4018,4031,4051,4068,4072],{"__ignoreMap":700},[704,3959,3960],{"class":706,"line":707},[704,3961,854],{"class":781},[704,3963,3964,3967,3970,3973,3975,3978,3980,3982],{"class":706,"line":804},[704,3965,3966],{"class":781},"  \"",[704,3968,3969],{"class":817},"name",[704,3971,3972],{"class":781},"\"",[704,3974,864],{"class":781},[704,3976,3977],{"class":781}," \"",[704,3979,3949],{"class":713},[704,3981,3972],{"class":781},[704,3983,875],{"class":781},[704,3985,3986,3988,3991,3993,3995,3997,3999,4001],{"class":706,"line":811},[704,3987,3966],{"class":781},[704,3989,3990],{"class":817},"message",[704,3992,3972],{"class":781},[704,3994,864],{"class":781},[704,3996,3977],{"class":781},[704,3998,3854],{"class":713},[704,4000,3972],{"class":781},[704,4002,875],{"class":781},[704,4004,4005,4007,4010,4012,4014,4016],{"class":706,"line":857},[704,4006,3966],{"class":781},[704,4008,4009],{"class":817},"status",[704,4011,3972],{"class":781},[704,4013,864],{"class":781},[704,4015,3841],{"class":2120},[704,4017,875],{"class":781},[704,4019,4020,4022,4025,4027,4029],{"class":706,"line":878},[704,4021,3966],{"class":781},[704,4023,4024],{"class":817},"data",[704,4026,3972],{"class":781},[704,4028,864],{"class":781},[704,4030,948],{"class":781},[704,4032,4033,4036,4038,4040,4042,4044,4047,4049],{"class":706,"line":997},[704,4034,4035],{"class":781},"    \"",[704,4037,3462],{"class":710},[704,4039,3972],{"class":781},[704,4041,864],{"class":781},[704,4043,3977],{"class":781},[704,4045,4046],{"class":713},"Card declined by issuer: insufficient_funds",[704,4048,3972],{"class":781},[704,4050,875],{"class":781},[704,4052,4053,4055,4057,4059,4061,4063,4065],{"class":706,"line":1031},[704,4054,4035],{"class":781},[704,4056,3465],{"class":710},[704,4058,3972],{"class":781},[704,4060,864],{"class":781},[704,4062,3977],{"class":781},[704,4064,3893],{"class":713},[704,4066,4067],{"class":781},"\"\n",[704,4069,4070],{"class":706,"line":1521},[704,4071,1591],{"class":781},[704,4073,4074],{"class":706,"line":1529},[704,4075,4076],{"class":781},"}\n",[618,4078,4079],{},"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,4081,4084],{"className":696,"code":4082,"filename":4083,"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,4085,4086,4094,4107,4118,4141,4163,4195,4219],{"__ignoreMap":700},[704,4087,4088,4091],{"class":706,"line":707},[704,4089,4090],{"class":710},"ERROR",[704,4092,4093],{"class":785}," [app] POST \u002Fapi\u002Fpayment\u002Fprocess 402 in 12ms\n",[704,4095,4096,4098,4101,4104],{"class":706,"line":804},[704,4097,3188],{"class":710},[704,4099,4100],{"class":713}," error:",[704,4102,4103],{"class":713}," Payment",[704,4105,4106],{"class":713}," declined\n",[704,4108,4109,4112,4115],{"class":706,"line":811},[704,4110,4111],{"class":710},"  │",[704,4113,4114],{"class":713},"     at",[704,4116,4117],{"class":713}," app\u002Fapi\u002Fpayment\u002Fprocess\u002Froute.ts:336\n",[704,4119,4120,4122,4125,4128,4131,4134,4136,4138],{"class":706,"line":857},[704,4121,4111],{"class":710},[704,4123,4124],{"class":713},"   ❯",[704,4126,4127],{"class":2120}," 336",[704,4129,4130],{"class":713}," ┃",[704,4132,4133],{"class":713}," throw",[704,4135,3495],{"class":713},[704,4137,851],{"class":781},[704,4139,4140],{"class":785},"{ message: 'Payment declined', ... })\n",[704,4142,4143,4145,4148,4151,4154,4157,4160],{"class":706,"line":878},[704,4144,4111],{"class":710},[704,4146,4147],{"class":713},"     Why:",[704,4149,4150],{"class":713}," Card",[704,4152,4153],{"class":713}," declined",[704,4155,4156],{"class":713}," by",[704,4158,4159],{"class":713}," issuer:",[704,4161,4162],{"class":713}," insufficient_funds\n",[704,4164,4165,4167,4170,4173,4176,4179,4181,4183,4186,4189,4192],{"class":706,"line":997},[704,4166,4111],{"class":710},[704,4168,4169],{"class":713},"     Fix:",[704,4171,4172],{"class":713}," Try",[704,4174,4175],{"class":713}," a",[704,4177,4178],{"class":713}," different",[704,4180,3045],{"class":713},[704,4182,3083],{"class":713},[704,4184,4185],{"class":713}," or",[704,4187,4188],{"class":713}," contact",[704,4190,4191],{"class":713}," your",[704,4193,4194],{"class":713}," bank\n",[704,4196,4197,4199,4202,4205,4208,4211,4214,4217],{"class":706,"line":1031},[704,4198,4111],{"class":710},[704,4200,4201],{"class":713},"     stack",[704,4203,4204],{"class":785}," (3 ",[704,4206,4207],{"class":713},"frames",[704,4209,4210],{"class":713}," hidden",[704,4212,4213],{"class":713}," in",[704,4215,4216],{"class":713}," node_modules",[704,4218,883],{"class":781},[704,4220,4221,4223,4225,4228],{"class":706,"line":1521},[704,4222,3240],{"class":710},[704,4224,3226],{"class":713},[704,4226,4227],{"class":713}," amount=",[704,4229,4230],{"class":2120},"4999\n",[686,4232,4234],{"id":4233},"parsing-errors-on-the-client","Parsing Errors on the Client",[618,4236,3455,4237,4240,4241,4243,4244,4247],{},[622,4238,4239],{},"parseError"," to extract the structured fields from any error, whether it's a fetch response, an ",[622,4242,3949],{},", or a plain ",[622,4245,4246],{},"Error"," object:",[694,4249,4254],{"className":4250,"code":4251,"filename":4252,"language":4253,"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,4255,4256,4265,4284,4288,4312,4319,4346,4362,4413,4419,4472,4487,4526,4531,4536,4541,4545],{"__ignoreMap":700},[704,4257,4258,4260,4263],{"class":706,"line":707},[704,4259,872],{"class":781},[704,4261,4262],{"class":713},"use client",[704,4264,801],{"class":781},[704,4266,4267,4269,4271,4274,4276,4278,4280,4282],{"class":706,"line":804},[704,4268,778],{"class":777},[704,4270,782],{"class":781},[704,4272,4273],{"class":785}," parseError",[704,4275,789],{"class":781},[704,4277,792],{"class":777},[704,4279,795],{"class":781},[704,4281,1954],{"class":713},[704,4283,801],{"class":781},[704,4285,4286],{"class":706,"line":811},[704,4287,808],{"emptyLinePlaceholder":807},[704,4289,4290,4292,4295,4298,4300,4303,4305,4308,4310],{"class":706,"line":857},[704,4291,939],{"class":817},[704,4293,4294],{"class":817}," function",[704,4296,4297],{"class":848}," handleSubmit",[704,4299,851],{"class":781},[704,4301,4302],{"class":2525},"formData",[704,4304,864],{"class":781},[704,4306,4307],{"class":710}," FormData",[704,4309,2529],{"class":781},[704,4311,948],{"class":781},[704,4313,4314,4317],{"class":706,"line":878},[704,4315,4316],{"class":777},"  try",[704,4318,948],{"class":781},[704,4320,4321,4323,4326,4328,4330,4333,4335,4337,4340,4342,4344],{"class":706,"line":997},[704,4322,2539],{"class":817},[704,4324,4325],{"class":785}," res",[704,4327,845],{"class":781},[704,4329,1445],{"class":777},[704,4331,4332],{"class":848}," fetch",[704,4334,851],{"class":860},[704,4336,872],{"class":781},[704,4338,4339],{"class":713},"\u002Fapi\u002Fpayment\u002Fprocess",[704,4341,872],{"class":781},[704,4343,826],{"class":781},[704,4345,948],{"class":781},[704,4347,4348,4351,4353,4355,4358,4360],{"class":706,"line":1031},[704,4349,4350],{"class":860},"      method",[704,4352,864],{"class":781},[704,4354,795],{"class":781},[704,4356,4357],{"class":713},"POST",[704,4359,872],{"class":781},[704,4361,875],{"class":781},[704,4363,4364,4367,4369,4372,4374,4376,4378,4380,4382,4384,4387,4389,4391,4393,4396,4398,4400,4402,4404,4407,4409,4411],{"class":706,"line":1521},[704,4365,4366],{"class":860},"      body",[704,4368,864],{"class":781},[704,4370,4371],{"class":785}," JSON",[704,4373,970],{"class":781},[704,4375,1716],{"class":848},[704,4377,851],{"class":860},[704,4379,978],{"class":781},[704,4381,3594],{"class":860},[704,4383,864],{"class":781},[704,4385,4386],{"class":848}," Number",[704,4388,851],{"class":860},[704,4390,4302],{"class":785},[704,4392,970],{"class":781},[704,4394,4395],{"class":848},"get",[704,4397,851],{"class":860},[704,4399,872],{"class":781},[704,4401,3603],{"class":713},[704,4403,872],{"class":781},[704,4405,4406],{"class":860},")) ",[704,4408,842],{"class":781},[704,4410,2529],{"class":860},[704,4412,875],{"class":781},[704,4414,4415,4417],{"class":706,"line":1529},[704,4416,3727],{"class":781},[704,4418,883],{"class":860},[704,4420,4421,4423,4425,4427,4430,4432,4435,4437,4440,4442,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469],{"class":706,"line":1534},[704,4422,2585],{"class":777},[704,4424,2522],{"class":860},[704,4426,3349],{"class":781},[704,4428,4429],{"class":785},"res",[704,4431,970],{"class":781},[704,4433,4434],{"class":785},"ok",[704,4436,2598],{"class":860},[704,4438,4439],{"class":777},"throw",[704,4441,782],{"class":781},[704,4443,4444],{"class":860}," data",[704,4446,864],{"class":781},[704,4448,1445],{"class":777},[704,4450,4325],{"class":785},[704,4452,970],{"class":781},[704,4454,1008],{"class":848},[704,4456,1336],{"class":860},[704,4458,826],{"class":781},[704,4460,2327],{"class":860},[704,4462,864],{"class":781},[704,4464,4325],{"class":785},[704,4466,970],{"class":781},[704,4468,4009],{"class":785},[704,4470,4471],{"class":781}," }\n",[704,4473,4474,4476,4479,4481,4483,4485],{"class":706,"line":1541},[704,4475,1524],{"class":781},[704,4477,4478],{"class":777}," catch",[704,4480,2522],{"class":860},[704,4482,3791],{"class":785},[704,4484,2598],{"class":860},[704,4486,854],{"class":781},[704,4488,4489,4491,4493,4495,4497,4499,4501,4504,4506,4509,4511,4514,4516,4518,4520,4522,4524],{"class":706,"line":1553},[704,4490,2539],{"class":817},[704,4492,782],{"class":781},[704,4494,1015],{"class":785},[704,4496,826],{"class":781},[704,4498,2327],{"class":785},[704,4500,826],{"class":781},[704,4502,4503],{"class":785}," why",[704,4505,826],{"class":781},[704,4507,4508],{"class":785}," fix",[704,4510,826],{"class":781},[704,4512,4513],{"class":785}," link",[704,4515,789],{"class":781},[704,4517,845],{"class":781},[704,4519,4273],{"class":848},[704,4521,851],{"class":860},[704,4523,3791],{"class":785},[704,4525,883],{"class":860},[704,4527,4528],{"class":706,"line":1563},[704,4529,4530],{"class":1566},"    \u002F\u002F message: \"Payment declined\"\n",[704,4532,4533],{"class":706,"line":1570},[704,4534,4535],{"class":1566},"    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n",[704,4537,4538],{"class":706,"line":1576},[704,4539,4540],{"class":1566},"    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n",[704,4542,4543],{"class":706,"line":1588},[704,4544,1591],{"class":781},[704,4546,4547],{"class":706,"line":1594},[704,4548,4076],{"class":781},[618,4550,4551,4553,4554,4557,4558,4561],{},[622,4552,4239],{}," normalizes any error shape into a flat ",[622,4555,4556],{},"{ message, status, why?, fix?, link? }"," object, so your UI code never has to dig through nested ",[622,4559,4560],{},"data.data"," or check for different error formats.",[682,4563,557],{"id":4564},"configuration-1",[1056,4566,4567,4568,4571,4572,1640,4574,1640,4576,1640,4578,4580],{"color":1058,"icon":84},"See the ",[671,4569,4570],{"href":558},"Configuration reference"," for the full list of shared options (",[622,4573,1699],{},[622,4575,1708],{},[622,4577,1676],{},[622,4579,1713],{},", middleware options, etc.).",[618,4582,4583,4584,4586],{},"The ",[622,4585,624],{}," factory accepts the following options:",[1721,4588,4589,4601],{},[1724,4590,4591],{},[1727,4592,4593,4595,4597,4599],{},[1730,4594,1732],{},[1730,4596,1735],{},[1730,4598,1738],{},[1730,4600,1741],{},[1743,4602,4603,4622,4639,4659,4677,4696,4715,4734,4753,4771],{},[1727,4604,4605,4609,4614,4619],{},[1748,4606,4607],{},[622,4608,1702],{},[1748,4610,4611],{},[622,4612,4613],{},"string",[1748,4615,4616],{},[622,4617,4618],{},"'app'",[1748,4620,4621],{},"Service name shown in logs",[1727,4623,4624,4629,4633,4636],{},[1748,4625,4626],{},[622,4627,4628],{},"environment",[1748,4630,4631],{},[622,4632,4613],{},[1748,4634,4635],{},"Auto-detected",[1748,4637,4638],{},"Environment name",[1727,4640,4641,4646,4651,4656],{},[1748,4642,4643],{},[622,4644,4645],{},"include",[1748,4647,4648],{},[622,4649,4650],{},"string[]",[1748,4652,4653],{},[622,4654,4655],{},"undefined",[1748,4657,4658],{},"Route patterns to log",[1727,4660,4661,4666,4670,4674],{},[1748,4662,4663],{},[622,4664,4665],{},"exclude",[1748,4667,4668],{},[622,4669,4650],{},[1748,4671,4672],{},[622,4673,4655],{},[1748,4675,4676],{},"Route patterns to exclude",[1727,4678,4679,4684,4689,4693],{},[1748,4680,4681],{},[622,4682,4683],{},"routes",[1748,4685,4686],{},[622,4687,4688],{},"Record\u003Cstring, RouteConfig>",[1748,4690,4691],{},[622,4692,4655],{},[1748,4694,4695],{},"Route-specific service configuration",[1727,4697,4698,4703,4708,4712],{},[1748,4699,4700],{},[622,4701,4702],{},"sampling.rates",[1748,4704,4705],{},[622,4706,4707],{},"object",[1748,4709,4710],{},[622,4711,4655],{},[1748,4713,4714],{},"Head sampling rates per log level",[1727,4716,4717,4722,4727,4731],{},[1748,4718,4719],{},[622,4720,4721],{},"sampling.keep",[1748,4723,4724],{},[622,4725,4726],{},"array",[1748,4728,4729],{},[622,4730,4655],{},[1748,4732,4733],{},"Tail sampling conditions",[1727,4735,4736,4741,4746,4750],{},[1748,4737,4738],{},[622,4739,4740],{},"keep",[1748,4742,4743],{},[622,4744,4745],{},"(ctx: TailSamplingContext) => void",[1748,4747,4748],{},[622,4749,4655],{},[1748,4751,4752],{},"Custom tail sampling callback",[1727,4754,4755,4759,4764,4768],{},[1748,4756,4757],{},[622,4758,1100],{},[1748,4760,4761],{},[622,4762,4763],{},"DrainFunction",[1748,4765,4766],{},[622,4767,4655],{},[1748,4769,4770],{},"Drain adapter for external services",[1727,4772,4773,4778,4783,4787],{},[1748,4774,4775],{},[622,4776,4777],{},"enrich",[1748,4779,4780],{},[622,4781,4782],{},"(ctx: EnrichContext) => void",[1748,4784,4785],{},[622,4786,4655],{},[1748,4788,4789],{},"Event enrichment callback",[682,4791,4793],{"id":4792},"tail-sampling","Tail Sampling",[618,4795,4796],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[694,4798,4800],{"className":767,"code":4799,"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,4801,4802,4827,4841,4849,4868,4876,4891,4905,4923,4929,4933,4938,4954,4988,5012,5016],{"__ignoreMap":700},[704,4803,4804,4806,4808,4810,4812,4814,4817,4819,4821,4823,4825],{"class":706,"line":707},[704,4805,814],{"class":777},[704,4807,818],{"class":817},[704,4809,782],{"class":781},[704,4811,823],{"class":785},[704,4813,826],{"class":781},[704,4815,4816],{"class":785}," useLogger ",[704,4818,842],{"class":781},[704,4820,845],{"class":781},[704,4822,786],{"class":848},[704,4824,851],{"class":785},[704,4826,854],{"class":781},[704,4828,4829,4831,4833,4835,4837,4839],{"class":706,"line":804},[704,4830,861],{"class":860},[704,4832,864],{"class":781},[704,4834,795],{"class":781},[704,4836,869],{"class":713},[704,4838,872],{"class":781},[704,4840,875],{"class":781},[704,4842,4843,4845,4847],{"class":706,"line":811},[704,4844,2282],{"class":860},[704,4846,864],{"class":781},[704,4848,948],{"class":781},[704,4850,4851,4853,4855,4857,4859,4861,4863,4865],{"class":706,"line":857},[704,4852,2292],{"class":860},[704,4854,864],{"class":781},[704,4856,782],{"class":781},[704,4858,2299],{"class":860},[704,4860,864],{"class":781},[704,4862,2304],{"class":2120},[704,4864,2335],{"class":781},[704,4866,4867],{"class":1566}," \u002F\u002F Only keep 10% of info logs\n",[704,4869,4870,4872,4874],{"class":706,"line":878},[704,4871,2313],{"class":860},[704,4873,864],{"class":781},[704,4875,2318],{"class":785},[704,4877,4878,4880,4882,4884,4886,4888],{"class":706,"line":997},[704,4879,2324],{"class":781},[704,4881,2327],{"class":860},[704,4883,864],{"class":781},[704,4885,2332],{"class":2120},[704,4887,2335],{"class":781},[704,4889,4890],{"class":1566},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[704,4892,4893,4895,4897,4899,4901,4903],{"class":706,"line":1031},[704,4894,2324],{"class":781},[704,4896,2346],{"class":860},[704,4898,864],{"class":781},[704,4900,2351],{"class":2120},[704,4902,2335],{"class":781},[704,4904,2356],{"class":1566},[704,4906,4907,4909,4911,4913,4915,4917,4919,4921],{"class":706,"line":1521},[704,4908,2324],{"class":781},[704,4910,2364],{"class":860},[704,4912,864],{"class":781},[704,4914,795],{"class":781},[704,4916,2371],{"class":713},[704,4918,872],{"class":781},[704,4920,2335],{"class":781},[704,4922,2378],{"class":1566},[704,4924,4925,4927],{"class":706,"line":1529},[704,4926,2384],{"class":785},[704,4928,875],{"class":781},[704,4930,4931],{"class":706,"line":1534},[704,4932,1909],{"class":781},[704,4934,4935],{"class":706,"line":1541},[704,4936,4937],{"class":1566},"  \u002F\u002F Custom: always keep premium user requests\n",[704,4939,4940,4942,4944,4946,4948,4950,4952],{"class":706,"line":1553},[704,4941,2517],{"class":848},[704,4943,864],{"class":781},[704,4945,2522],{"class":781},[704,4947,2526],{"class":2525},[704,4949,2529],{"class":781},[704,4951,945],{"class":817},[704,4953,948],{"class":781},[704,4955,4956,4958,4960,4962,4964,4966,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986],{"class":706,"line":1563},[704,4957,2539],{"class":817},[704,4959,2542],{"class":785},[704,4961,845],{"class":781},[704,4963,2547],{"class":785},[704,4965,970],{"class":781},[704,4967,2552],{"class":785},[704,4969,970],{"class":781},[704,4971,2557],{"class":785},[704,4973,2560],{"class":777},[704,4975,782],{"class":781},[704,4977,2565],{"class":860},[704,4979,2568],{"class":781},[704,4981,2571],{"class":710},[704,4983,789],{"class":781},[704,4985,2576],{"class":781},[704,4987,2579],{"class":710},[704,4989,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010],{"class":706,"line":1570},[704,4991,2585],{"class":777},[704,4993,2522],{"class":860},[704,4995,2557],{"class":785},[704,4997,2592],{"class":781},[704,4999,2595],{"class":785},[704,5001,2598],{"class":860},[704,5003,2526],{"class":785},[704,5005,970],{"class":781},[704,5007,2605],{"class":785},[704,5009,845],{"class":781},[704,5011,2610],{"class":1223},[704,5013,5014],{"class":706,"line":1576},[704,5015,1909],{"class":781},[704,5017,5018,5020],{"class":706,"line":1588},[704,5019,842],{"class":781},[704,5021,883],{"class":785},[618,5023,4583,5024,5026],{},[622,5025,4740],{}," rules use OR logic: any match forces the event through regardless of head sampling.",[682,5028,374],{"id":5029},"middleware",[618,5031,5032,5033,1627,5036,5039,5040,5042],{},"Set ",[622,5034,5035],{},"x-request-id",[622,5037,5038],{},"x-evlog-start"," headers so ",[622,5041,628],{}," can correlate timing across the middleware -> handler chain:",[694,5044,5047],{"className":767,"code":5045,"filename":5046,"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,5048,5049,5068,5072,5087,5091,5104,5124],{"__ignoreMap":700},[704,5050,5051,5053,5055,5058,5060,5062,5064,5066],{"class":706,"line":707},[704,5052,778],{"class":777},[704,5054,782],{"class":781},[704,5056,5057],{"class":785}," evlogMiddleware",[704,5059,789],{"class":781},[704,5061,792],{"class":777},[704,5063,795],{"class":781},[704,5065,798],{"class":713},[704,5067,801],{"class":781},[704,5069,5070],{"class":706,"line":804},[704,5071,808],{"emptyLinePlaceholder":807},[704,5073,5074,5076,5078,5081,5083,5085],{"class":706,"line":811},[704,5075,814],{"class":777},[704,5077,818],{"class":817},[704,5079,5080],{"class":785}," proxy ",[704,5082,932],{"class":781},[704,5084,5057],{"class":848},[704,5086,962],{"class":785},[704,5088,5089],{"class":706,"line":857},[704,5090,808],{"emptyLinePlaceholder":807},[704,5092,5093,5095,5097,5100,5102],{"class":706,"line":878},[704,5094,814],{"class":777},[704,5096,818],{"class":817},[704,5098,5099],{"class":785}," config ",[704,5101,932],{"class":781},[704,5103,948],{"class":781},[704,5105,5106,5109,5111,5113,5115,5118,5120,5122],{"class":706,"line":997},[704,5107,5108],{"class":860},"  matcher",[704,5110,864],{"class":781},[704,5112,1882],{"class":785},[704,5114,872],{"class":781},[704,5116,5117],{"class":713},"\u002Fapi\u002F:path*",[704,5119,872],{"class":781},[704,5121,1902],{"class":785},[704,5123,875],{"class":781},[704,5125,5126],{"class":706,"line":1031},[704,5127,4076],{"class":781},[1056,5129,5130,5131,5134,5135,5137,5138,5140],{"color":1058,"icon":13},"Older versions of Next.js use ",[622,5132,5133],{},"middleware.ts"," instead of ",[622,5136,5046],{},". The evlog middleware works with both, so just import from ",[622,5139,798],{}," regardless.",[682,5142,5144],{"id":5143},"server-actions","Server Actions",[618,5146,5147,5149],{},[622,5148,628],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[694,5151,5154],{"className":767,"code":5152,"filename":5153,"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,5155,5156,5165,5187,5191,5222,5234,5286,5291],{"__ignoreMap":700},[704,5157,5158,5160,5163],{"class":706,"line":707},[704,5159,872],{"class":781},[704,5161,5162],{"class":713},"use server",[704,5164,801],{"class":781},[704,5166,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185],{"class":706,"line":804},[704,5168,778],{"class":777},[704,5170,782],{"class":781},[704,5172,823],{"class":785},[704,5174,826],{"class":781},[704,5176,829],{"class":785},[704,5178,789],{"class":781},[704,5180,792],{"class":777},[704,5182,795],{"class":781},[704,5184,914],{"class":713},[704,5186,801],{"class":781},[704,5188,5189],{"class":706,"line":811},[704,5190,808],{"emptyLinePlaceholder":807},[704,5192,5193,5195,5197,5200,5202,5204,5206,5208,5210,5212,5214,5216,5218,5220],{"class":706,"line":857},[704,5194,814],{"class":777},[704,5196,818],{"class":817},[704,5198,5199],{"class":785}," checkout ",[704,5201,932],{"class":781},[704,5203,823],{"class":848},[704,5205,851],{"class":785},[704,5207,939],{"class":817},[704,5209,2522],{"class":781},[704,5211,4302],{"class":2525},[704,5213,864],{"class":781},[704,5215,4307],{"class":710},[704,5217,2529],{"class":781},[704,5219,945],{"class":817},[704,5221,948],{"class":781},[704,5223,5224,5226,5228,5230,5232],{"class":706,"line":878},[704,5225,953],{"class":817},[704,5227,834],{"class":785},[704,5229,845],{"class":781},[704,5231,829],{"class":848},[704,5233,962],{"class":860},[704,5235,5236,5238,5240,5242,5244,5246,5248,5250,5252,5255,5257,5259,5262,5264,5267,5269,5271,5273,5275,5278,5280,5282,5284],{"class":706,"line":997},[704,5237,967],{"class":785},[704,5239,970],{"class":781},[704,5241,973],{"class":848},[704,5243,851],{"class":860},[704,5245,978],{"class":781},[704,5247,981],{"class":860},[704,5249,864],{"class":781},[704,5251,795],{"class":781},[704,5253,5254],{"class":713},"checkout",[704,5256,872],{"class":781},[704,5258,826],{"class":781},[704,5260,5261],{"class":860}," cartId",[704,5263,864],{"class":781},[704,5265,5266],{"class":785}," formData",[704,5268,970],{"class":781},[704,5270,4395],{"class":848},[704,5272,851],{"class":860},[704,5274,872],{"class":781},[704,5276,5277],{"class":713},"cartId",[704,5279,872],{"class":781},[704,5281,2598],{"class":860},[704,5283,842],{"class":781},[704,5285,883],{"class":860},[704,5287,5288],{"class":706,"line":1031},[704,5289,5290],{"class":1566},"  \u002F\u002F ...\n",[704,5292,5293,5295],{"class":706,"line":1521},[704,5294,842],{"class":781},[704,5296,883],{"class":785},[682,5298,5300],{"id":5299},"client-provider","Client Provider",[618,5302,5303,5304,5307],{},"Wrap your root layout with ",[622,5305,5306],{},"EvlogProvider"," to enable client-side logging and its drain:",[694,5309,5312],{"className":4250,"code":5310,"filename":5311,"language":4253,"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,5313,5314,5334,5338,5378,5385,5408,5417,5450,5460,5469,5478,5487,5492],{"__ignoreMap":700},[704,5315,5316,5318,5320,5323,5325,5327,5329,5332],{"class":706,"line":707},[704,5317,778],{"class":777},[704,5319,782],{"class":781},[704,5321,5322],{"class":785}," EvlogProvider",[704,5324,789],{"class":781},[704,5326,792],{"class":777},[704,5328,795],{"class":781},[704,5330,5331],{"class":713},"evlog\u002Fnext\u002Fclient",[704,5333,801],{"class":781},[704,5335,5336],{"class":706,"line":804},[704,5337,808],{"emptyLinePlaceholder":807},[704,5339,5340,5342,5345,5347,5350,5353,5356,5359,5361,5363,5365,5368,5370,5373,5376],{"class":706,"line":811},[704,5341,814],{"class":777},[704,5343,5344],{"class":777}," default",[704,5346,4294],{"class":817},[704,5348,5349],{"class":848}," Layout",[704,5351,5352],{"class":781},"({",[704,5354,5355],{"class":2525}," children",[704,5357,5358],{"class":781}," }:",[704,5360,782],{"class":781},[704,5362,5355],{"class":860},[704,5364,864],{"class":781},[704,5366,5367],{"class":710}," React",[704,5369,970],{"class":781},[704,5371,5372],{"class":710},"ReactNode",[704,5374,5375],{"class":781}," })",[704,5377,948],{"class":781},[704,5379,5380,5382],{"class":706,"line":857},[704,5381,1000],{"class":777},[704,5383,5384],{"class":860}," (\n",[704,5386,5387,5390,5393,5396,5398,5400,5403,5405],{"class":706,"line":878},[704,5388,5389],{"class":781},"    \u003C",[704,5391,5392],{"class":860},"html",[704,5394,5395],{"class":817}," lang",[704,5397,932],{"class":781},[704,5399,3972],{"class":781},[704,5401,5402],{"class":713},"en",[704,5404,3972],{"class":781},[704,5406,5407],{"class":781},">\n",[704,5409,5410,5413,5415],{"class":706,"line":997},[704,5411,5412],{"class":781},"      \u003C",[704,5414,3057],{"class":860},[704,5416,5407],{"class":781},[704,5418,5419,5422,5424,5426,5428,5430,5432,5434,5437,5440,5443,5445,5447],{"class":706,"line":1031},[704,5420,5421],{"class":781},"        \u003C",[704,5423,5306],{"class":710},[704,5425,2430],{"class":817},[704,5427,932],{"class":781},[704,5429,3972],{"class":781},[704,5431,869],{"class":713},[704,5433,3972],{"class":781},[704,5435,5436],{"class":817}," transport",[704,5438,5439],{"class":781},"={{",[704,5441,5442],{"class":860}," enabled",[704,5444,864],{"class":781},[704,5446,1224],{"class":1223},[704,5448,5449],{"class":781}," }}>\n",[704,5451,5452,5455,5458],{"class":706,"line":1521},[704,5453,5454],{"class":781},"          {",[704,5456,5457],{"class":785},"children",[704,5459,4076],{"class":781},[704,5461,5462,5465,5467],{"class":706,"line":1529},[704,5463,5464],{"class":781},"        \u003C\u002F",[704,5466,5306],{"class":710},[704,5468,5407],{"class":781},[704,5470,5471,5474,5476],{"class":706,"line":1534},[704,5472,5473],{"class":781},"      \u003C\u002F",[704,5475,3057],{"class":860},[704,5477,5407],{"class":781},[704,5479,5480,5483,5485],{"class":706,"line":1541},[704,5481,5482],{"class":781},"    \u003C\u002F",[704,5484,5392],{"class":860},[704,5486,5407],{"class":781},[704,5488,5489],{"class":706,"line":1553},[704,5490,5491],{"class":860},"  )\n",[704,5493,5494],{"class":706,"line":1563},[704,5495,4076],{"class":781},[682,5497,327],{"id":5498},"client-logging",[618,5500,3455,5501,5504],{},[622,5502,5503],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[694,5506,5509],{"className":4250,"code":5507,"filename":5508,"language":4253,"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,5510,5511,5519,5547,5551,5587,5592,5605,5630,5643,5659,5663,5669,5726,5731,5739,5743],{"__ignoreMap":700},[704,5512,5513,5515,5517],{"class":706,"line":707},[704,5514,872],{"class":781},[704,5516,4262],{"class":713},[704,5518,801],{"class":781},[704,5520,5521,5523,5525,5527,5529,5532,5534,5537,5539,5541,5543,5545],{"class":706,"line":804},[704,5522,778],{"class":777},[704,5524,782],{"class":781},[704,5526,834],{"class":785},[704,5528,826],{"class":781},[704,5530,5531],{"class":785}," setIdentity",[704,5533,826],{"class":781},[704,5535,5536],{"class":785}," clearIdentity",[704,5538,789],{"class":781},[704,5540,792],{"class":777},[704,5542,795],{"class":781},[704,5544,5331],{"class":713},[704,5546,801],{"class":781},[704,5548,5549],{"class":706,"line":811},[704,5550,808],{"emptyLinePlaceholder":807},[704,5552,5553,5555,5557,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5581,5583,5585],{"class":706,"line":857},[704,5554,814],{"class":777},[704,5556,4294],{"class":817},[704,5558,5559],{"class":848}," Dashboard",[704,5561,5352],{"class":781},[704,5563,2542],{"class":2525},[704,5565,5358],{"class":781},[704,5567,782],{"class":781},[704,5569,2542],{"class":860},[704,5571,864],{"class":781},[704,5573,782],{"class":781},[704,5575,2915],{"class":860},[704,5577,864],{"class":781},[704,5579,5580],{"class":710}," string",[704,5582,789],{"class":781},[704,5584,5375],{"class":781},[704,5586,948],{"class":781},[704,5588,5589],{"class":706,"line":878},[704,5590,5591],{"class":1566},"  \u002F\u002F Set identity once - all subsequent logs include it\n",[704,5593,5594,5597,5599,5601,5603],{"class":706,"line":997},[704,5595,5596],{"class":848},"  useEffect",[704,5598,851],{"class":860},[704,5600,1336],{"class":781},[704,5602,945],{"class":817},[704,5604,948],{"class":781},[704,5606,5607,5610,5612,5614,5617,5619,5621,5623,5626,5628],{"class":706,"line":1031},[704,5608,5609],{"class":848},"    setIdentity",[704,5611,851],{"class":860},[704,5613,978],{"class":781},[704,5615,5616],{"class":860}," userId",[704,5618,864],{"class":781},[704,5620,2542],{"class":785},[704,5622,970],{"class":781},[704,5624,5625],{"class":785},"id",[704,5627,789],{"class":781},[704,5629,883],{"class":860},[704,5631,5632,5635,5637,5639,5641],{"class":706,"line":1521},[704,5633,5634],{"class":777},"    return",[704,5636,942],{"class":781},[704,5638,945],{"class":817},[704,5640,5536],{"class":848},[704,5642,962],{"class":860},[704,5644,5645,5648,5650,5652,5654,5656],{"class":706,"line":1529},[704,5646,5647],{"class":781},"  },",[704,5649,1882],{"class":860},[704,5651,2557],{"class":785},[704,5653,970],{"class":781},[704,5655,5625],{"class":785},[704,5657,5658],{"class":860},"])\n",[704,5660,5661],{"class":706,"line":1534},[704,5662,808],{"emptyLinePlaceholder":807},[704,5664,5665,5667],{"class":706,"line":1541},[704,5666,1000],{"class":777},[704,5668,5384],{"class":860},[704,5670,5671,5673,5676,5679,5682,5684,5686,5688,5690,5692,5694,5696,5698,5700,5703,5705,5707,5710,5712,5714,5717,5719,5721,5723],{"class":706,"line":1553},[704,5672,5389],{"class":781},[704,5674,5675],{"class":860},"button",[704,5677,5678],{"class":817}," onClick",[704,5680,5681],{"class":781},"={()",[704,5683,945],{"class":817},[704,5685,834],{"class":785},[704,5687,970],{"class":781},[704,5689,1058],{"class":848},[704,5691,851],{"class":785},[704,5693,978],{"class":781},[704,5695,981],{"class":860},[704,5697,864],{"class":781},[704,5699,795],{"class":781},[704,5701,5702],{"class":713},"export_clicked",[704,5704,872],{"class":781},[704,5706,826],{"class":781},[704,5708,5709],{"class":860}," format",[704,5711,864],{"class":781},[704,5713,795],{"class":781},[704,5715,5716],{"class":713},"csv",[704,5718,872],{"class":781},[704,5720,789],{"class":781},[704,5722,2529],{"class":785},[704,5724,5725],{"class":781},"}>\n",[704,5727,5728],{"class":706,"line":1563},[704,5729,5730],{"class":785},"      Export\n",[704,5732,5733,5735,5737],{"class":706,"line":1570},[704,5734,5482],{"class":781},[704,5736,5675],{"class":860},[704,5738,5407],{"class":781},[704,5740,5741],{"class":706,"line":1576},[704,5742,5491],{"class":860},[704,5744,5745],{"class":706,"line":1588},[704,5746,4076],{"class":781},[682,5748,5750],{"id":5749},"http-drain","HTTP drain",[618,5752,5753,5754,5756],{},"For advanced use cases, send structured ",[622,5755,2098],{}," events directly from the browser to a custom endpoint:",[694,5758,5761],{"className":767,"code":5759,"filename":5760,"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,5762,5763,5783,5787,5801,5823,5856,5862,5866,5873],{"__ignoreMap":700},[704,5764,5765,5767,5769,5772,5774,5776,5778,5781],{"class":706,"line":707},[704,5766,778],{"class":777},[704,5768,782],{"class":781},[704,5770,5771],{"class":785}," createHttpLogDrain",[704,5773,789],{"class":781},[704,5775,792],{"class":777},[704,5777,795],{"class":781},[704,5779,5780],{"class":713},"evlog\u002Fhttp",[704,5782,801],{"class":781},[704,5784,5785],{"class":706,"line":804},[704,5786,808],{"emptyLinePlaceholder":807},[704,5788,5789,5791,5793,5795,5797,5799],{"class":706,"line":811},[704,5790,2053],{"class":817},[704,5792,2153],{"class":785},[704,5794,932],{"class":781},[704,5796,5771],{"class":848},[704,5798,851],{"class":785},[704,5800,854],{"class":781},[704,5802,5803,5805,5807,5809,5812,5814,5816,5819,5821],{"class":706,"line":857},[704,5804,1329],{"class":860},[704,5806,864],{"class":781},[704,5808,782],{"class":781},[704,5810,5811],{"class":860}," endpoint",[704,5813,864],{"class":781},[704,5815,795],{"class":781},[704,5817,5818],{"class":713},"\u002Fapi\u002Fevlog\u002Fhttp-ingest",[704,5820,872],{"class":781},[704,5822,2307],{"class":781},[704,5824,5825,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852,5854],{"class":706,"line":878},[704,5826,5827],{"class":860},"  pipeline",[704,5829,864],{"class":781},[704,5831,782],{"class":781},[704,5833,2108],{"class":860},[704,5835,864],{"class":781},[704,5837,782],{"class":781},[704,5839,2115],{"class":860},[704,5841,864],{"class":781},[704,5843,2304],{"class":2120},[704,5845,826],{"class":781},[704,5847,2126],{"class":860},[704,5849,864],{"class":781},[704,5851,2131],{"class":2120},[704,5853,789],{"class":781},[704,5855,2307],{"class":781},[704,5857,5858,5860],{"class":706,"line":997},[704,5859,842],{"class":781},[704,5861,883],{"class":785},[704,5863,5864],{"class":706,"line":1031},[704,5865,808],{"emptyLinePlaceholder":807},[704,5867,5868,5870],{"class":706,"line":1521},[704,5869,1100],{"class":848},[704,5871,5872],{"class":785},"(drainEvent)\n",[704,5874,5875,5878,5881,5883,5886],{"class":706,"line":1529},[704,5876,5877],{"class":777},"await",[704,5879,5880],{"class":785}," drain",[704,5882,970],{"class":781},[704,5884,5885],{"class":848},"flush",[704,5887,962],{"class":785},[618,5889,5890],{},"The server endpoint receives batched events:",[694,5892,5895],{"className":767,"code":5893,"filename":5894,"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,5896,5897,5920,5939,5944,5971],{"__ignoreMap":700},[704,5898,5899,5901,5903,5905,5908,5910,5912,5914,5916,5918],{"class":706,"line":707},[704,5900,814],{"class":777},[704,5902,3363],{"class":817},[704,5904,4294],{"class":817},[704,5906,5907],{"class":848}," POST",[704,5909,851],{"class":781},[704,5911,2839],{"class":2525},[704,5913,864],{"class":781},[704,5915,2844],{"class":710},[704,5917,2529],{"class":781},[704,5919,948],{"class":781},[704,5921,5922,5924,5927,5929,5931,5933,5935,5937],{"class":706,"line":804},[704,5923,953],{"class":817},[704,5925,5926],{"class":785}," events",[704,5928,845],{"class":781},[704,5930,1445],{"class":777},[704,5932,2876],{"class":785},[704,5934,970],{"class":781},[704,5936,1008],{"class":848},[704,5938,962],{"class":860},[704,5940,5941],{"class":706,"line":811},[704,5942,5943],{"class":1566},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[704,5945,5946,5948,5951,5953,5955,5958,5960,5962,5964,5967,5969],{"class":706,"line":857},[704,5947,1000],{"class":777},[704,5949,5950],{"class":781}," new",[704,5952,1003],{"class":848},[704,5954,851],{"class":860},[704,5956,5957],{"class":781},"null,",[704,5959,782],{"class":781},[704,5961,2327],{"class":860},[704,5963,864],{"class":781},[704,5965,5966],{"class":2120}," 204",[704,5968,789],{"class":781},[704,5970,883],{"class":860},[704,5972,5973],{"class":706,"line":878},[704,5974,4076],{"class":781},[682,5976,5978],{"id":5977},"run-locally","Run Locally",[694,5980,5983],{"className":696,"code":5981,"filename":5982,"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,5984,5985,5996,6004,6011],{"__ignoreMap":700},[704,5986,5987,5990,5993],{"class":706,"line":707},[704,5988,5989],{"class":710},"git",[704,5991,5992],{"class":713}," clone",[704,5994,5995],{"class":713}," https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog.git\n",[704,5997,5998,6001],{"class":706,"line":804},[704,5999,6000],{"class":848},"cd",[704,6002,6003],{"class":713}," evlog\u002Fexamples\u002Fnextjs\n",[704,6005,6006,6008],{"class":706,"line":811},[704,6007,698],{"class":710},[704,6009,6010],{"class":713}," install\n",[704,6012,6013,6015,6018],{"class":706,"line":857},[704,6014,698],{"class":710},[704,6016,6017],{"class":713}," run",[704,6019,6020],{"class":713}," dev\n",[618,6022,6023,6024,6028],{},"Open ",[671,6025,6026],{"href":6026,"rel":6027},"http:\u002F\u002Flocalhost:3000",[675]," to explore the example.",[6030,6031,6032],"card-group",{},[6033,6034,6038],"card",{"icon":6035,"title":6036,"to":6037},"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,6040,6042],{"id":6041},"next-steps","Next Steps",[618,6044,6045,6046,6048],{},"Deepen your ",[1067,6047,245],{}," integration:",[643,6050,6051,6056,6061,6066],{},[646,6052,6053,6055],{},[671,6054,51],{"href":52},": Design comprehensive events with context layering",[646,6057,6058,6060],{},[671,6059,148],{"href":153},": Send logs to Axiom, Sentry, PostHog, and more",[646,6062,6063,6065],{},[671,6064,66],{"href":67},": Control log volume with head and tail sampling",[646,6067,6068,6070,6071,1640,6073,3466,6075,6077],{},[671,6069,56],{"href":57},": Throw errors with ",[622,6072,3462],{},[622,6074,3465],{},[622,6076,3469],{}," fields",[6079,6080,6081],"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":6083},[6084,6089,6095,6096,6097,6099,6102,6103,6104,6105,6106,6107,6108,6109,6110],{"id":684,"depth":804,"text":25,"children":6085},[6086,6087,6088],{"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":6090},[6091,6092,6093,6094],{"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":2782,"depth":804,"text":51},{"id":3249,"depth":804,"text":6098},"Background work (log.fork)",{"id":3451,"depth":804,"text":3452,"children":6100},[6101],{"id":4233,"depth":811,"text":4234},{"id":4564,"depth":804,"text":557},{"id":4792,"depth":804,"text":4793},{"id":5029,"depth":804,"text":374},{"id":5143,"depth":804,"text":5144},{"id":5299,"depth":804,"text":5300},{"id":5498,"depth":804,"text":327},{"id":5749,"depth":804,"text":5750},{"id":5977,"depth":804,"text":5978},{"id":6041,"depth":804,"text":6042},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.","md",[6114],{"label":6036,"icon":6035,"to":6037,"color":2757,"variant":6115},"subtle",{},{"title":245,"icon":248},{"title":245,"description":6111},"gFYQtJjJKLEJZbW3V7p7IMtsNNBI0cJRmGg6aBkq4tI",[6121,6123],{"title":240,"path":241,"stem":242,"description":6122,"icon":243,"children":-1},"Add the Nuxt module and every server route emits one wide event. `useLogger(event)` and `parseError` are auto-imported, `createError` comes from `evlog`.",{"title":250,"path":251,"stem":252,"description":6124,"icon":253,"children":-1},"Wire the handle and handleError hooks once, and every SvelteKit request carries a logger on `event.locals.log` until the response ends.",1789294030246]