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