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