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