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