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