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