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