[{"data":1,"prerenderedAt":3384},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-orpc":534,"-integrate-frameworks-orpc-surround":3379},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525,529],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":530,"path":531,"stem":532,"icon":533},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"id":535,"title":299,"body":536,"description":3369,"extension":3370,"links":3371,"meta":3375,"navigation":3376,"path":300,"seo":3377,"stem":301,"__hash__":3378},"docs\u002F4.integrate\u002Fframeworks\u002F15.orpc.md",{"type":537,"value":538,"toc":3352},"minimark",[539,571,591,636,640,645,725,729,1246,1267,1282,1285,1288,1614,1628,1702,1706,1712,1893,1991,2007,2011,2044,2268,2271,2349,2352,2507,2543,2546,2556,2560,2567,2740,2744,2751,2945,2956,2960,2966,3076,3080,3089,3239,3245,3249,3291,3299,3309,3313,3319,3348],[540,541,542,546,547,550,551,554,555,558,559,562,563,566,567,570],"p",{},[543,544,545],"code",{},"evlog\u002Forpc"," ships two primitives: ",[543,548,549],{},"withEvlog(handler)"," wraps any oRPC handler (",[543,552,553],{},"RPCHandler",", ",[543,556,557],{},"OpenAPIHandler",") so each request becomes one wide event, and ",[543,560,561],{},"evlog()"," is a procedure middleware that exposes ",[543,564,565],{},"context.log"," and tags the wide event with the procedure path as ",[543,568,569],{},"operation",".",[572,573,575,579,580,587,588,590],"callout",{"color":574,"icon":13},"info",[576,577,578],"strong",{},"oRPC v2:"," The oRPC maintainers have ",[581,582,586],"a",{"href":583,"rel":584},"https:\u002F\u002Fgithub.com\u002Fmiddleapi\u002Forpc\u002Fdiscussions\u002F1293#discussioncomment-17032656",[585],"nofollow","announced first-party evlog support in v2"," (edge-ready). Until v2 ships, ",[543,589,545],{}," is the integration path for oRPC v1 — and it remains the entrypoint for evlog's full pipeline (drains, enrichers, tail sampling, structured errors) regardless of how oRPC wires it in later.",[592,593,596,599,624],"prompt",{":actions":594,"description":595,"icon":302},"[\"copy\",\"cursor\",\"claude\"]","Set up evlog in my oRPC app",[540,597,598],{},"Set up evlog in my oRPC app.",[600,601,602,606,609,612,615,618,621],"ul",{},[603,604,605],"li",{},"Install evlog: pnpm add evlog",[603,607,608],{},"Call initLogger({ env: { service: 'my-rpc' } }) at startup",[603,610,611],{},"Wrap your RPCHandler \u002F OpenAPIHandler with withEvlog() from 'evlog\u002Forpc'",[603,613,614],{},"Add os.use(evlog()) on your base procedure for typed context.log + per-procedure operation",[603,616,617],{},"Declare EvlogOrpcContext on your base context to type context.log",[603,619,620],{},"Throw evlog errors (createError or defineErrorCatalog) directly from procedures — evlog\u002Forpc bridges them to ORPCError",[603,622,623],{},"Pass drain, enrich, include, and keep options to withEvlog()",[540,625,626,627,631,632],{},"Docs: ",[581,628,629],{"href":629,"rel":630},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Forpc",[585],"\nAdapters: ",[581,633,634],{"href":634,"rel":635},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[585],[637,638,25],"h2",{"id":639},"quick-start",[641,642,644],"h3",{"id":643},"_1-install","1. Install",[646,647,648,676,692,708],"code-group",{},[649,650,656],"pre",{"className":651,"code":652,"filename":653,"language":654,"meta":655,"style":655},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog @orpc\u002Fserver\n","pnpm","bash","",[543,657,658],{"__ignoreMap":655},[659,660,663,666,670,673],"span",{"class":661,"line":662},"line",1,[659,664,653],{"class":665},"sBMFI",[659,667,669],{"class":668},"sfazB"," add",[659,671,672],{"class":668}," evlog",[659,674,675],{"class":668}," @orpc\u002Fserver\n",[649,677,680],{"className":651,"code":678,"filename":679,"language":654,"meta":655,"style":655},"bun add evlog @orpc\u002Fserver\n","bun",[543,681,682],{"__ignoreMap":655},[659,683,684,686,688,690],{"class":661,"line":662},[659,685,679],{"class":665},[659,687,669],{"class":668},[659,689,672],{"class":668},[659,691,675],{"class":668},[649,693,696],{"className":651,"code":694,"filename":695,"language":654,"meta":655,"style":655},"yarn add evlog @orpc\u002Fserver\n","yarn",[543,697,698],{"__ignoreMap":655},[659,699,700,702,704,706],{"class":661,"line":662},[659,701,695],{"class":665},[659,703,669],{"class":668},[659,705,672],{"class":668},[659,707,675],{"class":668},[649,709,712],{"className":651,"code":710,"filename":711,"language":654,"meta":655,"style":655},"npm install evlog @orpc\u002Fserver\n","npm",[543,713,714],{"__ignoreMap":655},[659,715,716,718,721,723],{"class":661,"line":662},[659,717,711],{"class":665},[659,719,720],{"class":668}," install",[659,722,672],{"class":668},[659,724,675],{"class":668},[641,726,728],{"id":727},"_2-initialize-and-wire-the-wrappers","2. Initialize and wire the wrappers",[649,730,735],{"className":731,"code":732,"filename":733,"language":734,"meta":655,"style":655},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { os } from '@orpc\u002Fserver'\nimport { RPCHandler } from '@orpc\u002Fserver\u002Ffetch'\nimport { initLogger } from 'evlog'\nimport { evlog, withEvlog, type EvlogOrpcContext } from 'evlog\u002Forpc'\n\ninitLogger({\n  env: { service: 'my-rpc' },\n})\n\nconst base = os.$context\u003CEvlogOrpcContext>().use(evlog())\n\nconst router = {\n  health: base.handler(({ context }) => {\n    context.log.set({ route: 'health' })\n    return { ok: true }\n  }),\n}\n\nconst handler = withEvlog(new RPCHandler(router))\n\nexport default async function fetch(request: Request) {\n  const { matched, response } = await handler.handle(request, { prefix: '\u002Frpc' })\n  return matched ? response : new Response('Not Found', { status: 404 })\n}\n","server\u002Forpc.ts","typescript",[543,736,737,766,787,808,841,848,861,889,898,903,947,952,965,998,1035,1055,1067,1073,1078,1100,1105,1137,1193,1241],{"__ignoreMap":655},[659,738,739,743,747,751,754,757,760,763],{"class":661,"line":662},[659,740,742],{"class":741},"s7zQu","import",[659,744,746],{"class":745},"sMK4o"," {",[659,748,750],{"class":749},"sTEyZ"," os",[659,752,753],{"class":745}," }",[659,755,756],{"class":741}," from",[659,758,759],{"class":745}," '",[659,761,762],{"class":668},"@orpc\u002Fserver",[659,764,765],{"class":745},"'\n",[659,767,769,771,773,776,778,780,782,785],{"class":661,"line":768},2,[659,770,742],{"class":741},[659,772,746],{"class":745},[659,774,775],{"class":749}," RPCHandler",[659,777,753],{"class":745},[659,779,756],{"class":741},[659,781,759],{"class":745},[659,783,784],{"class":668},"@orpc\u002Fserver\u002Ffetch",[659,786,765],{"class":745},[659,788,790,792,794,797,799,801,803,806],{"class":661,"line":789},3,[659,791,742],{"class":741},[659,793,746],{"class":745},[659,795,796],{"class":749}," initLogger",[659,798,753],{"class":745},[659,800,756],{"class":741},[659,802,759],{"class":745},[659,804,805],{"class":668},"evlog",[659,807,765],{"class":745},[659,809,811,813,815,817,820,823,825,828,831,833,835,837,839],{"class":661,"line":810},4,[659,812,742],{"class":741},[659,814,746],{"class":745},[659,816,672],{"class":749},[659,818,819],{"class":745},",",[659,821,822],{"class":749}," withEvlog",[659,824,819],{"class":745},[659,826,827],{"class":741}," type",[659,829,830],{"class":749}," EvlogOrpcContext",[659,832,753],{"class":745},[659,834,756],{"class":741},[659,836,759],{"class":745},[659,838,545],{"class":668},[659,840,765],{"class":745},[659,842,844],{"class":661,"line":843},5,[659,845,847],{"emptyLinePlaceholder":846},true,"\n",[659,849,851,855,858],{"class":661,"line":850},6,[659,852,854],{"class":853},"s2Zo4","initLogger",[659,856,857],{"class":749},"(",[659,859,860],{"class":745},"{\n",[659,862,864,868,871,873,876,878,880,883,886],{"class":661,"line":863},7,[659,865,867],{"class":866},"swJcz","  env",[659,869,870],{"class":745},":",[659,872,746],{"class":745},[659,874,875],{"class":866}," service",[659,877,870],{"class":745},[659,879,759],{"class":745},[659,881,882],{"class":668},"my-rpc",[659,884,885],{"class":745},"'",[659,887,888],{"class":745}," },\n",[659,890,892,895],{"class":661,"line":891},8,[659,893,894],{"class":745},"}",[659,896,897],{"class":749},")\n",[659,899,901],{"class":661,"line":900},9,[659,902,847],{"emptyLinePlaceholder":846},[659,904,906,910,913,916,918,920,923,926,929,932,935,937,940,942,944],{"class":661,"line":905},10,[659,907,909],{"class":908},"spNyl","const",[659,911,912],{"class":749}," base ",[659,914,915],{"class":745},"=",[659,917,750],{"class":749},[659,919,570],{"class":745},[659,921,922],{"class":853},"$context",[659,924,925],{"class":745},"\u003C",[659,927,928],{"class":665},"EvlogOrpcContext",[659,930,931],{"class":745},">",[659,933,934],{"class":749},"()",[659,936,570],{"class":745},[659,938,939],{"class":853},"use",[659,941,857],{"class":749},[659,943,805],{"class":853},[659,945,946],{"class":749},"())\n",[659,948,950],{"class":661,"line":949},11,[659,951,847],{"emptyLinePlaceholder":846},[659,953,955,957,960,962],{"class":661,"line":954},12,[659,956,909],{"class":908},[659,958,959],{"class":749}," router ",[659,961,915],{"class":745},[659,963,964],{"class":745}," {\n",[659,966,968,971,973,976,978,981,983,986,990,993,996],{"class":661,"line":967},13,[659,969,970],{"class":866},"  health",[659,972,870],{"class":745},[659,974,975],{"class":749}," base",[659,977,570],{"class":745},[659,979,980],{"class":853},"handler",[659,982,857],{"class":749},[659,984,985],{"class":745},"({",[659,987,989],{"class":988},"sHdIc"," context",[659,991,992],{"class":745}," })",[659,994,995],{"class":908}," =>",[659,997,964],{"class":745},[659,999,1001,1004,1006,1009,1011,1014,1016,1019,1022,1024,1026,1029,1031,1033],{"class":661,"line":1000},14,[659,1002,1003],{"class":749},"    context",[659,1005,570],{"class":745},[659,1007,1008],{"class":749},"log",[659,1010,570],{"class":745},[659,1012,1013],{"class":853},"set",[659,1015,857],{"class":866},[659,1017,1018],{"class":745},"{",[659,1020,1021],{"class":866}," route",[659,1023,870],{"class":745},[659,1025,759],{"class":745},[659,1027,1028],{"class":668},"health",[659,1030,885],{"class":745},[659,1032,753],{"class":745},[659,1034,897],{"class":866},[659,1036,1038,1041,1043,1046,1048,1052],{"class":661,"line":1037},15,[659,1039,1040],{"class":741},"    return",[659,1042,746],{"class":745},[659,1044,1045],{"class":866}," ok",[659,1047,870],{"class":745},[659,1049,1051],{"class":1050},"sfNiH"," true",[659,1053,1054],{"class":745}," }\n",[659,1056,1058,1061,1064],{"class":661,"line":1057},16,[659,1059,1060],{"class":745},"  }",[659,1062,1063],{"class":749},")",[659,1065,1066],{"class":745},",\n",[659,1068,1070],{"class":661,"line":1069},17,[659,1071,1072],{"class":745},"}\n",[659,1074,1076],{"class":661,"line":1075},18,[659,1077,847],{"emptyLinePlaceholder":846},[659,1079,1081,1083,1086,1088,1090,1092,1095,1097],{"class":661,"line":1080},19,[659,1082,909],{"class":908},[659,1084,1085],{"class":749}," handler ",[659,1087,915],{"class":745},[659,1089,822],{"class":853},[659,1091,857],{"class":749},[659,1093,1094],{"class":745},"new",[659,1096,775],{"class":853},[659,1098,1099],{"class":749},"(router))\n",[659,1101,1103],{"class":661,"line":1102},20,[659,1104,847],{"emptyLinePlaceholder":846},[659,1106,1108,1111,1114,1117,1120,1123,1125,1128,1130,1133,1135],{"class":661,"line":1107},21,[659,1109,1110],{"class":741},"export",[659,1112,1113],{"class":741}," default",[659,1115,1116],{"class":908}," async",[659,1118,1119],{"class":908}," function",[659,1121,1122],{"class":853}," fetch",[659,1124,857],{"class":745},[659,1126,1127],{"class":988},"request",[659,1129,870],{"class":745},[659,1131,1132],{"class":665}," Request",[659,1134,1063],{"class":745},[659,1136,964],{"class":745},[659,1138,1140,1143,1145,1148,1150,1153,1155,1158,1161,1164,1166,1169,1171,1173,1175,1177,1180,1182,1184,1187,1189,1191],{"class":661,"line":1139},22,[659,1141,1142],{"class":908},"  const",[659,1144,746],{"class":745},[659,1146,1147],{"class":749}," matched",[659,1149,819],{"class":745},[659,1151,1152],{"class":749}," response",[659,1154,753],{"class":745},[659,1156,1157],{"class":745}," =",[659,1159,1160],{"class":741}," await",[659,1162,1163],{"class":749}," handler",[659,1165,570],{"class":745},[659,1167,1168],{"class":853},"handle",[659,1170,857],{"class":866},[659,1172,1127],{"class":749},[659,1174,819],{"class":745},[659,1176,746],{"class":745},[659,1178,1179],{"class":866}," prefix",[659,1181,870],{"class":745},[659,1183,759],{"class":745},[659,1185,1186],{"class":668},"\u002Frpc",[659,1188,885],{"class":745},[659,1190,753],{"class":745},[659,1192,897],{"class":866},[659,1194,1196,1199,1201,1204,1206,1209,1212,1215,1217,1219,1222,1224,1226,1228,1231,1233,1237,1239],{"class":661,"line":1195},23,[659,1197,1198],{"class":741},"  return",[659,1200,1147],{"class":749},[659,1202,1203],{"class":745}," ?",[659,1205,1152],{"class":749},[659,1207,1208],{"class":745}," :",[659,1210,1211],{"class":745}," new",[659,1213,1214],{"class":853}," Response",[659,1216,857],{"class":866},[659,1218,885],{"class":745},[659,1220,1221],{"class":668},"Not Found",[659,1223,885],{"class":745},[659,1225,819],{"class":745},[659,1227,746],{"class":745},[659,1229,1230],{"class":866}," status",[659,1232,870],{"class":745},[659,1234,1236],{"class":1235},"sbssI"," 404",[659,1238,753],{"class":745},[659,1240,897],{"class":866},[659,1242,1244],{"class":661,"line":1243},24,[659,1245,1072],{"class":745},[572,1247,1248,1251,1252,1258,1259,1262,1263,1266],{"color":574,"icon":515},[576,1249,1250],{},"Using Vite?"," The ",[581,1253,1254,1257],{"href":513},[543,1255,1256],{},"evlog\u002Fvite"," plugin"," replaces the ",[543,1260,1261],{},"initLogger()"," call with compile-time auto-initialization, strips ",[543,1264,1265],{},"log.debug()"," from production builds, and injects source locations.",[540,1268,1269,1271,1272,1275,1276,1278,1279,570],{},[543,1270,928],{}," declares ",[543,1273,1274],{},"log: RequestLogger"," on the procedure context so ",[543,1277,565],{}," is fully typed in every procedure that descends from ",[543,1280,1281],{},"base",[637,1283,46],{"id":1284},"wide-events",[540,1286,1287],{},"Build up context progressively through your handler. One request = one wide event:",[649,1289,1291],{"className":731,"code":1290,"filename":733,"language":734,"meta":655,"style":655},"const getUser = base\n  .input(z.object({ id: z.string() }))\n  .handler(async ({ input, context }) => {\n    context.log.set({ user: { id: input.id } })\n\n    const user = await db.findUser(input.id)\n    context.log.set({ user: { name: user.name, plan: user.plan } })\n\n    const orders = await db.findOrders(input.id)\n    context.log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n    return { user, orders }\n  })\n",[543,1292,1293,1305,1346,1373,1413,1417,1446,1500,1504,1532,1590,1594,1608],{"__ignoreMap":655},[659,1294,1295,1297,1300,1302],{"class":661,"line":662},[659,1296,909],{"class":908},[659,1298,1299],{"class":749}," getUser ",[659,1301,915],{"class":745},[659,1303,1304],{"class":749}," base\n",[659,1306,1307,1310,1313,1316,1318,1321,1323,1325,1328,1330,1333,1335,1338,1341,1343],{"class":661,"line":768},[659,1308,1309],{"class":745},"  .",[659,1311,1312],{"class":853},"input",[659,1314,1315],{"class":749},"(z",[659,1317,570],{"class":745},[659,1319,1320],{"class":853},"object",[659,1322,857],{"class":749},[659,1324,1018],{"class":745},[659,1326,1327],{"class":866}," id",[659,1329,870],{"class":745},[659,1331,1332],{"class":749}," z",[659,1334,570],{"class":745},[659,1336,1337],{"class":853},"string",[659,1339,1340],{"class":749},"() ",[659,1342,894],{"class":745},[659,1344,1345],{"class":749},"))\n",[659,1347,1348,1350,1352,1354,1357,1360,1363,1365,1367,1369,1371],{"class":661,"line":789},[659,1349,1309],{"class":745},[659,1351,980],{"class":853},[659,1353,857],{"class":749},[659,1355,1356],{"class":908},"async",[659,1358,1359],{"class":745}," ({",[659,1361,1362],{"class":988}," input",[659,1364,819],{"class":745},[659,1366,989],{"class":988},[659,1368,992],{"class":745},[659,1370,995],{"class":908},[659,1372,964],{"class":745},[659,1374,1375,1377,1379,1381,1383,1385,1387,1389,1392,1394,1396,1398,1400,1402,1404,1407,1409,1411],{"class":661,"line":810},[659,1376,1003],{"class":749},[659,1378,570],{"class":745},[659,1380,1008],{"class":749},[659,1382,570],{"class":745},[659,1384,1013],{"class":853},[659,1386,857],{"class":866},[659,1388,1018],{"class":745},[659,1390,1391],{"class":866}," user",[659,1393,870],{"class":745},[659,1395,746],{"class":745},[659,1397,1327],{"class":866},[659,1399,870],{"class":745},[659,1401,1362],{"class":749},[659,1403,570],{"class":745},[659,1405,1406],{"class":749},"id",[659,1408,753],{"class":745},[659,1410,753],{"class":745},[659,1412,897],{"class":866},[659,1414,1415],{"class":661,"line":843},[659,1416,847],{"emptyLinePlaceholder":846},[659,1418,1419,1422,1424,1426,1428,1431,1433,1436,1438,1440,1442,1444],{"class":661,"line":850},[659,1420,1421],{"class":908},"    const",[659,1423,1391],{"class":749},[659,1425,1157],{"class":745},[659,1427,1160],{"class":741},[659,1429,1430],{"class":749}," db",[659,1432,570],{"class":745},[659,1434,1435],{"class":853},"findUser",[659,1437,857],{"class":866},[659,1439,1312],{"class":749},[659,1441,570],{"class":745},[659,1443,1406],{"class":749},[659,1445,897],{"class":866},[659,1447,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1471,1473,1475,1477,1480,1482,1485,1487,1489,1491,1494,1496,1498],{"class":661,"line":863},[659,1449,1003],{"class":749},[659,1451,570],{"class":745},[659,1453,1008],{"class":749},[659,1455,570],{"class":745},[659,1457,1013],{"class":853},[659,1459,857],{"class":866},[659,1461,1018],{"class":745},[659,1463,1391],{"class":866},[659,1465,870],{"class":745},[659,1467,746],{"class":745},[659,1469,1470],{"class":866}," name",[659,1472,870],{"class":745},[659,1474,1391],{"class":749},[659,1476,570],{"class":745},[659,1478,1479],{"class":749},"name",[659,1481,819],{"class":745},[659,1483,1484],{"class":866}," plan",[659,1486,870],{"class":745},[659,1488,1391],{"class":749},[659,1490,570],{"class":745},[659,1492,1493],{"class":749},"plan",[659,1495,753],{"class":745},[659,1497,753],{"class":745},[659,1499,897],{"class":866},[659,1501,1502],{"class":661,"line":891},[659,1503,847],{"emptyLinePlaceholder":846},[659,1505,1506,1508,1511,1513,1515,1517,1519,1522,1524,1526,1528,1530],{"class":661,"line":900},[659,1507,1421],{"class":908},[659,1509,1510],{"class":749}," orders",[659,1512,1157],{"class":745},[659,1514,1160],{"class":741},[659,1516,1430],{"class":749},[659,1518,570],{"class":745},[659,1520,1521],{"class":853},"findOrders",[659,1523,857],{"class":866},[659,1525,1312],{"class":749},[659,1527,570],{"class":745},[659,1529,1406],{"class":749},[659,1531,897],{"class":866},[659,1533,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1557,1559,1561,1563,1566,1568,1571,1573,1576,1578,1581,1584,1586,1588],{"class":661,"line":905},[659,1535,1003],{"class":749},[659,1537,570],{"class":745},[659,1539,1008],{"class":749},[659,1541,570],{"class":745},[659,1543,1013],{"class":853},[659,1545,857],{"class":866},[659,1547,1018],{"class":745},[659,1549,1510],{"class":866},[659,1551,870],{"class":745},[659,1553,746],{"class":745},[659,1555,1556],{"class":866}," count",[659,1558,870],{"class":745},[659,1560,1510],{"class":749},[659,1562,570],{"class":745},[659,1564,1565],{"class":749},"length",[659,1567,819],{"class":745},[659,1569,1570],{"class":866}," totalRevenue",[659,1572,870],{"class":745},[659,1574,1575],{"class":853}," sum",[659,1577,857],{"class":866},[659,1579,1580],{"class":749},"orders",[659,1582,1583],{"class":866},") ",[659,1585,894],{"class":745},[659,1587,753],{"class":745},[659,1589,897],{"class":866},[659,1591,1592],{"class":661,"line":949},[659,1593,847],{"emptyLinePlaceholder":846},[659,1595,1596,1598,1600,1602,1604,1606],{"class":661,"line":954},[659,1597,1040],{"class":741},[659,1599,746],{"class":745},[659,1601,1391],{"class":749},[659,1603,819],{"class":745},[659,1605,1510],{"class":749},[659,1607,1054],{"class":745},[659,1609,1610,1612],{"class":661,"line":967},[659,1611,1060],{"class":745},[659,1613,897],{"class":749},[540,1615,1616,1617,1619,1620,1623,1624,1627],{},"All fields are merged into a single wide event emitted when the request completes. The ",[543,1618,569],{}," field is filled automatically from the procedure path (nested routers like ",[543,1621,1622],{},"users.profile.get"," surface as ",[543,1625,1626],{},"operation: 'users.profile.get'","):",[649,1629,1632],{"className":651,"code":1630,"filename":1631,"language":654,"meta":655,"style":655},"14:58:15 INFO [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n  ├─ operation: getUser\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[543,1633,1634,1645,1656,1675,1691],{"__ignoreMap":655},[659,1635,1636,1639,1642],{"class":661,"line":662},[659,1637,1638],{"class":665},"14:58:15",[659,1640,1641],{"class":668}," INFO",[659,1643,1644],{"class":749}," [my-rpc] POST \u002Frpc\u002FgetUser 200 in 12ms\n",[659,1646,1647,1650,1653],{"class":661,"line":768},[659,1648,1649],{"class":665},"  ├─",[659,1651,1652],{"class":668}," operation:",[659,1654,1655],{"class":668}," getUser\n",[659,1657,1658,1660,1663,1666,1669,1672],{"class":661,"line":789},[659,1659,1649],{"class":665},[659,1661,1662],{"class":668}," orders:",[659,1664,1665],{"class":668}," count=",[659,1667,1668],{"class":1235},"2",[659,1670,1671],{"class":668}," totalRevenue=",[659,1673,1674],{"class":1235},"6298\n",[659,1676,1677,1679,1682,1685,1688],{"class":661,"line":810},[659,1678,1649],{"class":665},[659,1680,1681],{"class":668}," user:",[659,1683,1684],{"class":668}," id=usr_123",[659,1686,1687],{"class":668}," name=Alice",[659,1689,1690],{"class":668}," plan=pro\n",[659,1692,1693,1696,1699],{"class":661,"line":843},[659,1694,1695],{"class":665},"  └─",[659,1697,1698],{"class":668}," requestId:",[659,1700,1701],{"class":668}," 4a8ff3a8-...\n",[637,1703,1705],{"id":1704},"uselogger","useLogger()",[540,1707,1708,1709,1711],{},"Use ",[543,1710,1705],{}," to access the request-scoped logger from anywhere in the call stack without passing the context through your service layer:",[649,1713,1716],{"className":731,"code":1714,"filename":1715,"language":734,"meta":655,"style":655},"import { useLogger } from 'evlog\u002Forpc'\n\nexport async function findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n\n  const user = await db.findUser(id)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  return user\n}\n","server\u002Fservices\u002Fuser.ts",[543,1717,1718,1737,1741,1765,1779,1806,1810,1832,1878,1882,1889],{"__ignoreMap":655},[659,1719,1720,1722,1724,1727,1729,1731,1733,1735],{"class":661,"line":662},[659,1721,742],{"class":741},[659,1723,746],{"class":745},[659,1725,1726],{"class":749}," useLogger",[659,1728,753],{"class":745},[659,1730,756],{"class":741},[659,1732,759],{"class":745},[659,1734,545],{"class":668},[659,1736,765],{"class":745},[659,1738,1739],{"class":661,"line":768},[659,1740,847],{"emptyLinePlaceholder":846},[659,1742,1743,1745,1747,1749,1752,1754,1756,1758,1761,1763],{"class":661,"line":789},[659,1744,1110],{"class":741},[659,1746,1116],{"class":908},[659,1748,1119],{"class":908},[659,1750,1751],{"class":853}," findUser",[659,1753,857],{"class":745},[659,1755,1406],{"class":988},[659,1757,870],{"class":745},[659,1759,1760],{"class":665}," string",[659,1762,1063],{"class":745},[659,1764,964],{"class":745},[659,1766,1767,1769,1772,1774,1776],{"class":661,"line":810},[659,1768,1142],{"class":908},[659,1770,1771],{"class":749}," log",[659,1773,1157],{"class":745},[659,1775,1726],{"class":853},[659,1777,1778],{"class":866},"()\n",[659,1780,1781,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804],{"class":661,"line":843},[659,1782,1783],{"class":749},"  log",[659,1785,570],{"class":745},[659,1787,1013],{"class":853},[659,1789,857],{"class":866},[659,1791,1018],{"class":745},[659,1793,1391],{"class":866},[659,1795,870],{"class":745},[659,1797,746],{"class":745},[659,1799,1327],{"class":749},[659,1801,753],{"class":745},[659,1803,753],{"class":745},[659,1805,897],{"class":866},[659,1807,1808],{"class":661,"line":850},[659,1809,847],{"emptyLinePlaceholder":846},[659,1811,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830],{"class":661,"line":863},[659,1813,1142],{"class":908},[659,1815,1391],{"class":749},[659,1817,1157],{"class":745},[659,1819,1160],{"class":741},[659,1821,1430],{"class":749},[659,1823,570],{"class":745},[659,1825,1435],{"class":853},[659,1827,857],{"class":866},[659,1829,1406],{"class":749},[659,1831,897],{"class":866},[659,1833,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876],{"class":661,"line":891},[659,1835,1783],{"class":749},[659,1837,570],{"class":745},[659,1839,1013],{"class":853},[659,1841,857],{"class":866},[659,1843,1018],{"class":745},[659,1845,1391],{"class":866},[659,1847,870],{"class":745},[659,1849,746],{"class":745},[659,1851,1470],{"class":866},[659,1853,870],{"class":745},[659,1855,1391],{"class":749},[659,1857,570],{"class":745},[659,1859,1479],{"class":749},[659,1861,819],{"class":745},[659,1863,1484],{"class":866},[659,1865,870],{"class":745},[659,1867,1391],{"class":749},[659,1869,570],{"class":745},[659,1871,1493],{"class":749},[659,1873,753],{"class":745},[659,1875,753],{"class":745},[659,1877,897],{"class":866},[659,1879,1880],{"class":661,"line":900},[659,1881,847],{"emptyLinePlaceholder":846},[659,1883,1884,1886],{"class":661,"line":905},[659,1885,1198],{"class":741},[659,1887,1888],{"class":749}," user\n",[659,1890,1891],{"class":661,"line":949},[659,1892,1072],{"class":745},[649,1894,1896],{"className":731,"code":1895,"filename":733,"language":734,"meta":655,"style":655},"import { findUser } from '.\u002Fservices\u002Fuser'\n\nconst getUser = base\n  .input(z.object({ id: z.string() }))\n  .handler(async ({ input }) => findUser(input.id))\n",[543,1897,1898,1917,1921,1931,1963],{"__ignoreMap":655},[659,1899,1900,1902,1904,1906,1908,1910,1912,1915],{"class":661,"line":662},[659,1901,742],{"class":741},[659,1903,746],{"class":745},[659,1905,1751],{"class":749},[659,1907,753],{"class":745},[659,1909,756],{"class":741},[659,1911,759],{"class":745},[659,1913,1914],{"class":668},".\u002Fservices\u002Fuser",[659,1916,765],{"class":745},[659,1918,1919],{"class":661,"line":768},[659,1920,847],{"emptyLinePlaceholder":846},[659,1922,1923,1925,1927,1929],{"class":661,"line":789},[659,1924,909],{"class":908},[659,1926,1299],{"class":749},[659,1928,915],{"class":745},[659,1930,1304],{"class":749},[659,1932,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961],{"class":661,"line":810},[659,1934,1309],{"class":745},[659,1936,1312],{"class":853},[659,1938,1315],{"class":749},[659,1940,570],{"class":745},[659,1942,1320],{"class":853},[659,1944,857],{"class":749},[659,1946,1018],{"class":745},[659,1948,1327],{"class":866},[659,1950,870],{"class":745},[659,1952,1332],{"class":749},[659,1954,570],{"class":745},[659,1956,1337],{"class":853},[659,1958,1340],{"class":749},[659,1960,894],{"class":745},[659,1962,1345],{"class":749},[659,1964,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1986,1988],{"class":661,"line":843},[659,1966,1309],{"class":745},[659,1968,980],{"class":853},[659,1970,857],{"class":749},[659,1972,1356],{"class":908},[659,1974,1359],{"class":745},[659,1976,1362],{"class":988},[659,1978,992],{"class":745},[659,1980,995],{"class":908},[659,1982,1751],{"class":853},[659,1984,1985],{"class":749},"(input",[659,1987,570],{"class":745},[659,1989,1990],{"class":749},"id))\n",[540,1992,1993,1994,1996,1997,1999,2000,2002,2003,2006],{},"Both ",[543,1995,565],{}," and ",[543,1998,1705],{}," return the same logger instance. ",[543,2001,1705],{}," uses ",[543,2004,2005],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[637,2008,2010],{"id":2009},"error-handling","Error Handling",[540,2012,1708,2013,2016,2017,554,2020,2023,2024,2027,2028,2030,2031,2034,2035,554,2037,554,2040,2043],{},[543,2014,2015],{},"createError"," for structured errors with ",[543,2018,2019],{},"why",[543,2021,2022],{},"fix",", and ",[543,2025,2026],{},"link"," fields. The ",[543,2029,561],{}," middleware catches the throw, records it on the wide event, and bridges it to an ",[543,2032,2033],{},"ORPCError"," so the wire response carries your ",[543,2036,543],{},[543,2038,2039],{},"status",[543,2041,2042],{},"message",", and the human-guidance fields:",[649,2045,2047],{"className":731,"code":2046,"filename":733,"language":734,"meta":655,"style":655},"import { createError } from 'evlog'\n\nconst checkout = base\n  .handler(({ context }) => {\n    context.log.set({ cart: { items: 3, total: 9999 } })\n\n    throw createError({\n      message: 'Payment failed',\n      code: 'PAYMENT_DECLINED',\n      status: 402,\n      why: 'Card declined by issuer',\n      fix: 'Try a different payment method',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n    })\n  })\n",[543,2048,2049,2068,2072,2083,2101,2148,2152,2163,2179,2195,2207,2223,2239,2255,2262],{"__ignoreMap":655},[659,2050,2051,2053,2055,2058,2060,2062,2064,2066],{"class":661,"line":662},[659,2052,742],{"class":741},[659,2054,746],{"class":745},[659,2056,2057],{"class":749}," createError",[659,2059,753],{"class":745},[659,2061,756],{"class":741},[659,2063,759],{"class":745},[659,2065,805],{"class":668},[659,2067,765],{"class":745},[659,2069,2070],{"class":661,"line":768},[659,2071,847],{"emptyLinePlaceholder":846},[659,2073,2074,2076,2079,2081],{"class":661,"line":789},[659,2075,909],{"class":908},[659,2077,2078],{"class":749}," checkout ",[659,2080,915],{"class":745},[659,2082,1304],{"class":749},[659,2084,2085,2087,2089,2091,2093,2095,2097,2099],{"class":661,"line":810},[659,2086,1309],{"class":745},[659,2088,980],{"class":853},[659,2090,857],{"class":749},[659,2092,985],{"class":745},[659,2094,989],{"class":988},[659,2096,992],{"class":745},[659,2098,995],{"class":908},[659,2100,964],{"class":745},[659,2102,2103,2105,2107,2109,2111,2113,2115,2117,2120,2122,2124,2127,2129,2132,2134,2137,2139,2142,2144,2146],{"class":661,"line":843},[659,2104,1003],{"class":749},[659,2106,570],{"class":745},[659,2108,1008],{"class":749},[659,2110,570],{"class":745},[659,2112,1013],{"class":853},[659,2114,857],{"class":866},[659,2116,1018],{"class":745},[659,2118,2119],{"class":866}," cart",[659,2121,870],{"class":745},[659,2123,746],{"class":745},[659,2125,2126],{"class":866}," items",[659,2128,870],{"class":745},[659,2130,2131],{"class":1235}," 3",[659,2133,819],{"class":745},[659,2135,2136],{"class":866}," total",[659,2138,870],{"class":745},[659,2140,2141],{"class":1235}," 9999",[659,2143,753],{"class":745},[659,2145,753],{"class":745},[659,2147,897],{"class":866},[659,2149,2150],{"class":661,"line":850},[659,2151,847],{"emptyLinePlaceholder":846},[659,2153,2154,2157,2159,2161],{"class":661,"line":863},[659,2155,2156],{"class":741},"    throw",[659,2158,2057],{"class":853},[659,2160,857],{"class":866},[659,2162,860],{"class":745},[659,2164,2165,2168,2170,2172,2175,2177],{"class":661,"line":891},[659,2166,2167],{"class":866},"      message",[659,2169,870],{"class":745},[659,2171,759],{"class":745},[659,2173,2174],{"class":668},"Payment failed",[659,2176,885],{"class":745},[659,2178,1066],{"class":745},[659,2180,2181,2184,2186,2188,2191,2193],{"class":661,"line":900},[659,2182,2183],{"class":866},"      code",[659,2185,870],{"class":745},[659,2187,759],{"class":745},[659,2189,2190],{"class":668},"PAYMENT_DECLINED",[659,2192,885],{"class":745},[659,2194,1066],{"class":745},[659,2196,2197,2200,2202,2205],{"class":661,"line":905},[659,2198,2199],{"class":866},"      status",[659,2201,870],{"class":745},[659,2203,2204],{"class":1235}," 402",[659,2206,1066],{"class":745},[659,2208,2209,2212,2214,2216,2219,2221],{"class":661,"line":949},[659,2210,2211],{"class":866},"      why",[659,2213,870],{"class":745},[659,2215,759],{"class":745},[659,2217,2218],{"class":668},"Card declined by issuer",[659,2220,885],{"class":745},[659,2222,1066],{"class":745},[659,2224,2225,2228,2230,2232,2235,2237],{"class":661,"line":954},[659,2226,2227],{"class":866},"      fix",[659,2229,870],{"class":745},[659,2231,759],{"class":745},[659,2233,2234],{"class":668},"Try a different payment method",[659,2236,885],{"class":745},[659,2238,1066],{"class":745},[659,2240,2241,2244,2246,2248,2251,2253],{"class":661,"line":967},[659,2242,2243],{"class":866},"      link",[659,2245,870],{"class":745},[659,2247,759],{"class":745},[659,2249,2250],{"class":668},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[659,2252,885],{"class":745},[659,2254,1066],{"class":745},[659,2256,2257,2260],{"class":661,"line":1000},[659,2258,2259],{"class":745},"    }",[659,2261,897],{"class":866},[659,2263,2264,2266],{"class":661,"line":1037},[659,2265,1060],{"class":745},[659,2267,897],{"class":749},[540,2269,2270],{},"The error is captured and logged with both the custom context and structured error fields:",[649,2272,2274],{"className":651,"code":2273,"filename":1631,"language":654,"meta":655,"style":655},"14:58:20 ERROR [my-rpc] POST \u002Frpc\u002Fcheckout 402 in 3ms\n  ├─ operation: checkout\n  ├─ error: name=EvlogError code=PAYMENT_DECLINED status=402 message=Payment failed\n  ├─ cart: items=3 total=9999\n  └─ requestId: 880a50ac-...\n",[543,2275,2276,2287,2296,2321,2340],{"__ignoreMap":655},[659,2277,2278,2281,2284],{"class":661,"line":662},[659,2279,2280],{"class":665},"14:58:20",[659,2282,2283],{"class":668}," ERROR",[659,2285,2286],{"class":749}," [my-rpc] POST \u002Frpc\u002Fcheckout 402 in 3ms\n",[659,2288,2289,2291,2293],{"class":661,"line":768},[659,2290,1649],{"class":665},[659,2292,1652],{"class":668},[659,2294,2295],{"class":668}," checkout\n",[659,2297,2298,2300,2303,2306,2309,2312,2315,2318],{"class":661,"line":789},[659,2299,1649],{"class":665},[659,2301,2302],{"class":668}," error:",[659,2304,2305],{"class":668}," name=EvlogError",[659,2307,2308],{"class":668}," code=PAYMENT_DECLINED",[659,2310,2311],{"class":668}," status=",[659,2313,2314],{"class":1235},"402",[659,2316,2317],{"class":668}," message=Payment",[659,2319,2320],{"class":668}," failed\n",[659,2322,2323,2325,2328,2331,2334,2337],{"class":661,"line":810},[659,2324,1649],{"class":665},[659,2326,2327],{"class":668}," cart:",[659,2329,2330],{"class":668}," items=",[659,2332,2333],{"class":1235},"3",[659,2335,2336],{"class":668}," total=",[659,2338,2339],{"class":1235},"9999\n",[659,2341,2342,2344,2346],{"class":661,"line":843},[659,2343,1695],{"class":665},[659,2345,1698],{"class":668},[659,2347,2348],{"class":668}," 880a50ac-...\n",[540,2350,2351],{},"Wire response returned to the client:",[649,2353,2358],{"className":2354,"code":2355,"filename":2356,"language":2357,"meta":655,"style":655},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"defined\": false,\n  \"code\": \"PAYMENT_DECLINED\",\n  \"status\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","HTTP 402","json",[543,2359,2360,2364,2380,2399,2413,2431,2444,2463,2481,2498,2503],{"__ignoreMap":655},[659,2361,2362],{"class":661,"line":662},[659,2363,860],{"class":745},[659,2365,2366,2369,2372,2375,2377],{"class":661,"line":768},[659,2367,2368],{"class":745},"  \"",[659,2370,2371],{"class":908},"defined",[659,2373,2374],{"class":745},"\"",[659,2376,870],{"class":745},[659,2378,2379],{"class":745}," false,\n",[659,2381,2382,2384,2386,2388,2390,2393,2395,2397],{"class":661,"line":789},[659,2383,2368],{"class":745},[659,2385,543],{"class":908},[659,2387,2374],{"class":745},[659,2389,870],{"class":745},[659,2391,2392],{"class":745}," \"",[659,2394,2190],{"class":668},[659,2396,2374],{"class":745},[659,2398,1066],{"class":745},[659,2400,2401,2403,2405,2407,2409,2411],{"class":661,"line":810},[659,2402,2368],{"class":745},[659,2404,2039],{"class":908},[659,2406,2374],{"class":745},[659,2408,870],{"class":745},[659,2410,2204],{"class":1235},[659,2412,1066],{"class":745},[659,2414,2415,2417,2419,2421,2423,2425,2427,2429],{"class":661,"line":843},[659,2416,2368],{"class":745},[659,2418,2042],{"class":908},[659,2420,2374],{"class":745},[659,2422,870],{"class":745},[659,2424,2392],{"class":745},[659,2426,2174],{"class":668},[659,2428,2374],{"class":745},[659,2430,1066],{"class":745},[659,2432,2433,2435,2438,2440,2442],{"class":661,"line":850},[659,2434,2368],{"class":745},[659,2436,2437],{"class":908},"data",[659,2439,2374],{"class":745},[659,2441,870],{"class":745},[659,2443,964],{"class":745},[659,2445,2446,2449,2451,2453,2455,2457,2459,2461],{"class":661,"line":863},[659,2447,2448],{"class":745},"    \"",[659,2450,2019],{"class":665},[659,2452,2374],{"class":745},[659,2454,870],{"class":745},[659,2456,2392],{"class":745},[659,2458,2218],{"class":668},[659,2460,2374],{"class":745},[659,2462,1066],{"class":745},[659,2464,2465,2467,2469,2471,2473,2475,2477,2479],{"class":661,"line":891},[659,2466,2448],{"class":745},[659,2468,2022],{"class":665},[659,2470,2374],{"class":745},[659,2472,870],{"class":745},[659,2474,2392],{"class":745},[659,2476,2234],{"class":668},[659,2478,2374],{"class":745},[659,2480,1066],{"class":745},[659,2482,2483,2485,2487,2489,2491,2493,2495],{"class":661,"line":900},[659,2484,2448],{"class":745},[659,2486,2026],{"class":665},[659,2488,2374],{"class":745},[659,2490,870],{"class":745},[659,2492,2392],{"class":745},[659,2494,2250],{"class":668},[659,2496,2497],{"class":745},"\"\n",[659,2499,2500],{"class":661,"line":905},[659,2501,2502],{"class":745},"  }\n",[659,2504,2505],{"class":661,"line":949},[659,2506,1072],{"class":745},[572,2508,2509,2510,2513,2514,2517,2518,2521,2522,2524,2525,2524,2527,2529,2530,2532,2533,2535,2536,2542],{"color":574,"icon":13},"oRPC's error envelope is ",[543,2511,2512],{},"{ defined, code, status, message, data }"," — clients deserialize errors as a typed union via ",[543,2515,2516],{},"safe()"," from ",[543,2519,2520],{},"@orpc\u002Fclient",". evlog follows the protocol, so ",[543,2523,2019],{},"\u002F",[543,2526,2022],{},[543,2528,2026],{}," live under ",[543,2531,2437],{}," instead of at the response root. The authoring API (",[543,2534,2015],{}," \u002F ",[581,2537,2539],{"href":2538},"\u002Flearn\u002Fstructured-errors#error-catalogs",[543,2540,2541],{},"defineErrorCatalog",") is identical to the rest of evlog.",[637,2544,504],{"id":2545},"configuration",[540,2547,2548,2549,2552,2553,2555],{},"See the ",[581,2550,2551],{"href":505},"Configuration reference"," for all available options (",[543,2554,854],{},", middleware options, sampling, silent mode, etc.).",[637,2557,2559],{"id":2558},"drain-enrichers","Drain & Enrichers",[540,2561,2562,2563,2566],{},"Configure drain adapters and enrichers directly in the ",[543,2564,2565],{},"withEvlog()"," options:",[649,2568,2570],{"className":731,"code":2569,"filename":733,"language":734,"meta":655,"style":655},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\nconst handler = withEvlog(new RPCHandler(router), {\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n})\n",[543,2571,2572,2592,2612,2616,2629,2633,2656,2669,2688,2699,2729,2734],{"__ignoreMap":655},[659,2573,2574,2576,2578,2581,2583,2585,2587,2590],{"class":661,"line":662},[659,2575,742],{"class":741},[659,2577,746],{"class":745},[659,2579,2580],{"class":749}," createAxiomDrain",[659,2582,753],{"class":745},[659,2584,756],{"class":741},[659,2586,759],{"class":745},[659,2588,2589],{"class":668},"evlog\u002Faxiom",[659,2591,765],{"class":745},[659,2593,2594,2596,2598,2601,2603,2605,2607,2610],{"class":661,"line":768},[659,2595,742],{"class":741},[659,2597,746],{"class":745},[659,2599,2600],{"class":749}," createUserAgentEnricher",[659,2602,753],{"class":745},[659,2604,756],{"class":741},[659,2606,759],{"class":745},[659,2608,2609],{"class":668},"evlog\u002Fenrichers",[659,2611,765],{"class":745},[659,2613,2614],{"class":661,"line":789},[659,2615,847],{"emptyLinePlaceholder":846},[659,2617,2618,2620,2623,2625,2627],{"class":661,"line":810},[659,2619,909],{"class":908},[659,2621,2622],{"class":749}," userAgent ",[659,2624,915],{"class":745},[659,2626,2600],{"class":853},[659,2628,1778],{"class":749},[659,2630,2631],{"class":661,"line":843},[659,2632,847],{"emptyLinePlaceholder":846},[659,2634,2635,2637,2639,2641,2643,2645,2647,2649,2652,2654],{"class":661,"line":850},[659,2636,909],{"class":908},[659,2638,1085],{"class":749},[659,2640,915],{"class":745},[659,2642,822],{"class":853},[659,2644,857],{"class":749},[659,2646,1094],{"class":745},[659,2648,775],{"class":853},[659,2650,2651],{"class":749},"(router)",[659,2653,819],{"class":745},[659,2655,964],{"class":745},[659,2657,2658,2661,2663,2665,2667],{"class":661,"line":863},[659,2659,2660],{"class":866},"  drain",[659,2662,870],{"class":745},[659,2664,2580],{"class":853},[659,2666,934],{"class":749},[659,2668,1066],{"class":745},[659,2670,2671,2674,2676,2679,2682,2684,2686],{"class":661,"line":891},[659,2672,2673],{"class":853},"  enrich",[659,2675,870],{"class":745},[659,2677,2678],{"class":745}," (",[659,2680,2681],{"class":988},"ctx",[659,2683,1063],{"class":745},[659,2685,995],{"class":908},[659,2687,964],{"class":745},[659,2689,2690,2693,2695,2697],{"class":661,"line":900},[659,2691,2692],{"class":853},"    userAgent",[659,2694,857],{"class":866},[659,2696,2681],{"class":749},[659,2698,897],{"class":866},[659,2700,2701,2704,2706,2709,2711,2714,2716,2719,2721,2724,2726],{"class":661,"line":905},[659,2702,2703],{"class":749},"    ctx",[659,2705,570],{"class":745},[659,2707,2708],{"class":749},"event",[659,2710,570],{"class":745},[659,2712,2713],{"class":749},"region",[659,2715,1157],{"class":745},[659,2717,2718],{"class":749}," process",[659,2720,570],{"class":745},[659,2722,2723],{"class":749},"env",[659,2725,570],{"class":745},[659,2727,2728],{"class":749},"FLY_REGION\n",[659,2730,2731],{"class":661,"line":949},[659,2732,2733],{"class":745},"  },\n",[659,2735,2736,2738],{"class":661,"line":954},[659,2737,894],{"class":745},[659,2739,897],{"class":749},[641,2741,2743],{"id":2742},"pipeline-batching-retry","Pipeline (Batching & Retry)",[540,2745,2746,2747,2750],{},"For production, wrap your adapter with ",[543,2748,2749],{},"createDrainPipeline"," to batch events and retry on failure:",[649,2752,2754],{"className":731,"code":2753,"filename":733,"language":734,"meta":655,"style":655},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nconst handler = withEvlog(new RPCHandler(router), { drain })\n",[543,2755,2756,2777,2795,2815,2819,2841,2870,2888,2894,2913,2917],{"__ignoreMap":655},[659,2757,2758,2760,2762,2764,2767,2769,2771,2773,2775],{"class":661,"line":662},[659,2759,742],{"class":741},[659,2761,827],{"class":741},[659,2763,746],{"class":745},[659,2765,2766],{"class":749}," DrainContext",[659,2768,753],{"class":745},[659,2770,756],{"class":741},[659,2772,759],{"class":745},[659,2774,805],{"class":668},[659,2776,765],{"class":745},[659,2778,2779,2781,2783,2785,2787,2789,2791,2793],{"class":661,"line":768},[659,2780,742],{"class":741},[659,2782,746],{"class":745},[659,2784,2580],{"class":749},[659,2786,753],{"class":745},[659,2788,756],{"class":741},[659,2790,759],{"class":745},[659,2792,2589],{"class":668},[659,2794,765],{"class":745},[659,2796,2797,2799,2801,2804,2806,2808,2810,2813],{"class":661,"line":789},[659,2798,742],{"class":741},[659,2800,746],{"class":745},[659,2802,2803],{"class":749}," createDrainPipeline",[659,2805,753],{"class":745},[659,2807,756],{"class":741},[659,2809,759],{"class":745},[659,2811,2812],{"class":668},"evlog\u002Fpipeline",[659,2814,765],{"class":745},[659,2816,2817],{"class":661,"line":810},[659,2818,847],{"emptyLinePlaceholder":846},[659,2820,2821,2823,2826,2828,2830,2832,2835,2837,2839],{"class":661,"line":843},[659,2822,909],{"class":908},[659,2824,2825],{"class":749}," pipeline ",[659,2827,915],{"class":745},[659,2829,2803],{"class":853},[659,2831,925],{"class":745},[659,2833,2834],{"class":665},"DrainContext",[659,2836,931],{"class":745},[659,2838,857],{"class":749},[659,2840,860],{"class":745},[659,2842,2843,2846,2848,2850,2853,2855,2858,2860,2863,2865,2868],{"class":661,"line":850},[659,2844,2845],{"class":866},"  batch",[659,2847,870],{"class":745},[659,2849,746],{"class":745},[659,2851,2852],{"class":866}," size",[659,2854,870],{"class":745},[659,2856,2857],{"class":1235}," 50",[659,2859,819],{"class":745},[659,2861,2862],{"class":866}," intervalMs",[659,2864,870],{"class":745},[659,2866,2867],{"class":1235}," 5000",[659,2869,888],{"class":745},[659,2871,2872,2875,2877,2879,2882,2884,2886],{"class":661,"line":863},[659,2873,2874],{"class":866},"  retry",[659,2876,870],{"class":745},[659,2878,746],{"class":745},[659,2880,2881],{"class":866}," maxAttempts",[659,2883,870],{"class":745},[659,2885,2131],{"class":1235},[659,2887,888],{"class":745},[659,2889,2890,2892],{"class":661,"line":891},[659,2891,894],{"class":745},[659,2893,897],{"class":749},[659,2895,2896,2898,2901,2903,2906,2908,2911],{"class":661,"line":900},[659,2897,909],{"class":908},[659,2899,2900],{"class":749}," drain ",[659,2902,915],{"class":745},[659,2904,2905],{"class":853}," pipeline",[659,2907,857],{"class":749},[659,2909,2910],{"class":853},"createAxiomDrain",[659,2912,946],{"class":749},[659,2914,2915],{"class":661,"line":905},[659,2916,847],{"emptyLinePlaceholder":846},[659,2918,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943],{"class":661,"line":949},[659,2920,909],{"class":908},[659,2922,1085],{"class":749},[659,2924,915],{"class":745},[659,2926,822],{"class":853},[659,2928,857],{"class":749},[659,2930,1094],{"class":745},[659,2932,775],{"class":853},[659,2934,2651],{"class":749},[659,2936,819],{"class":745},[659,2938,746],{"class":745},[659,2940,2900],{"class":749},[659,2942,894],{"class":745},[659,2944,897],{"class":749},[572,2946,2947,2948,2951,2952,2955],{"color":574,"icon":13},"Call ",[543,2949,2950],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[581,2953,2954],{"href":496},"Pipeline docs"," for all options.",[637,2957,2959],{"id":2958},"tail-sampling","Tail Sampling",[540,2961,1708,2962,2965],{},[543,2963,2964],{},"keep"," to force-retain specific events regardless of head sampling:",[649,2967,2969],{"className":731,"code":2968,"filename":733,"language":734,"meta":655,"style":655},"const handler = withEvlog(new RPCHandler(router), {\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n})\n",[543,2970,2971,2993,3005,3022,3066,3070],{"__ignoreMap":655},[659,2972,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991],{"class":661,"line":662},[659,2974,909],{"class":908},[659,2976,1085],{"class":749},[659,2978,915],{"class":745},[659,2980,822],{"class":853},[659,2982,857],{"class":749},[659,2984,1094],{"class":745},[659,2986,775],{"class":853},[659,2988,2651],{"class":749},[659,2990,819],{"class":745},[659,2992,964],{"class":745},[659,2994,2995,2997,2999,3001,3003],{"class":661,"line":768},[659,2996,2660],{"class":866},[659,2998,870],{"class":745},[659,3000,2580],{"class":853},[659,3002,934],{"class":749},[659,3004,1066],{"class":745},[659,3006,3007,3010,3012,3014,3016,3018,3020],{"class":661,"line":789},[659,3008,3009],{"class":853},"  keep",[659,3011,870],{"class":745},[659,3013,2678],{"class":745},[659,3015,2681],{"class":988},[659,3017,1063],{"class":745},[659,3019,995],{"class":908},[659,3021,964],{"class":745},[659,3023,3024,3027,3029,3031,3033,3036,3039,3042,3044,3046,3049,3052,3054,3056,3058,3061,3063],{"class":661,"line":810},[659,3025,3026],{"class":741},"    if",[659,3028,2678],{"class":866},[659,3030,2681],{"class":749},[659,3032,570],{"class":745},[659,3034,3035],{"class":749},"duration",[659,3037,3038],{"class":745}," &&",[659,3040,3041],{"class":749}," ctx",[659,3043,570],{"class":745},[659,3045,3035],{"class":749},[659,3047,3048],{"class":745}," >",[659,3050,3051],{"class":1235}," 2000",[659,3053,1583],{"class":866},[659,3055,2681],{"class":749},[659,3057,570],{"class":745},[659,3059,3060],{"class":749},"shouldKeep",[659,3062,1157],{"class":745},[659,3064,3065],{"class":1050}," true\n",[659,3067,3068],{"class":661,"line":843},[659,3069,2733],{"class":745},[659,3071,3072,3074],{"class":661,"line":850},[659,3073,894],{"class":745},[659,3075,897],{"class":749},[637,3077,3079],{"id":3078},"route-filtering","Route Filtering",[540,3081,3082,2535,3085,3088],{},[543,3083,3084],{},"include",[543,3086,3087],{},"exclude"," match against the HTTP path (the request URL), not the procedure name:",[649,3090,3092],{"className":731,"code":3091,"filename":733,"language":734,"meta":655,"style":655},"const handler = withEvlog(new RPCHandler(router), {\n  include: ['\u002Frpc\u002F**'],\n  exclude: ['\u002Frpc\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Frpc\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Frpc\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n})\n",[543,3093,3094,3116,3138,3167,3176,3203,3229,3233],{"__ignoreMap":655},[659,3095,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114],{"class":661,"line":662},[659,3097,909],{"class":908},[659,3099,1085],{"class":749},[659,3101,915],{"class":745},[659,3103,822],{"class":853},[659,3105,857],{"class":749},[659,3107,1094],{"class":745},[659,3109,775],{"class":853},[659,3111,2651],{"class":749},[659,3113,819],{"class":745},[659,3115,964],{"class":745},[659,3117,3118,3121,3123,3126,3128,3131,3133,3136],{"class":661,"line":768},[659,3119,3120],{"class":866},"  include",[659,3122,870],{"class":745},[659,3124,3125],{"class":749}," [",[659,3127,885],{"class":745},[659,3129,3130],{"class":668},"\u002Frpc\u002F**",[659,3132,885],{"class":745},[659,3134,3135],{"class":749},"]",[659,3137,1066],{"class":745},[659,3139,3140,3143,3145,3147,3149,3152,3154,3156,3158,3161,3163,3165],{"class":661,"line":789},[659,3141,3142],{"class":866},"  exclude",[659,3144,870],{"class":745},[659,3146,3125],{"class":749},[659,3148,885],{"class":745},[659,3150,3151],{"class":668},"\u002Frpc\u002F_internal\u002F**",[659,3153,885],{"class":745},[659,3155,819],{"class":745},[659,3157,759],{"class":745},[659,3159,3160],{"class":668},"\u002Fhealth",[659,3162,885],{"class":745},[659,3164,3135],{"class":749},[659,3166,1066],{"class":745},[659,3168,3169,3172,3174],{"class":661,"line":810},[659,3170,3171],{"class":866},"  routes",[659,3173,870],{"class":745},[659,3175,964],{"class":745},[659,3177,3178,3181,3184,3186,3188,3190,3192,3194,3196,3199,3201],{"class":661,"line":843},[659,3179,3180],{"class":745},"    '",[659,3182,3183],{"class":866},"\u002Frpc\u002Fauth\u002F**",[659,3185,885],{"class":745},[659,3187,870],{"class":745},[659,3189,746],{"class":745},[659,3191,875],{"class":866},[659,3193,870],{"class":745},[659,3195,759],{"class":745},[659,3197,3198],{"class":668},"auth-service",[659,3200,885],{"class":745},[659,3202,888],{"class":745},[659,3204,3205,3207,3210,3212,3214,3216,3218,3220,3222,3225,3227],{"class":661,"line":850},[659,3206,3180],{"class":745},[659,3208,3209],{"class":866},"\u002Frpc\u002Fpayment\u002F**",[659,3211,885],{"class":745},[659,3213,870],{"class":745},[659,3215,746],{"class":745},[659,3217,875],{"class":866},[659,3219,870],{"class":745},[659,3221,759],{"class":745},[659,3223,3224],{"class":668},"payment-service",[659,3226,885],{"class":745},[659,3228,888],{"class":745},[659,3230,3231],{"class":661,"line":863},[659,3232,2733],{"class":745},[659,3234,3235,3237],{"class":661,"line":891},[659,3236,894],{"class":745},[659,3238,897],{"class":749},[540,3240,3241,3242,3244],{},"When a route is filtered out, the wrapper still injects a no-op ",[543,3243,565],{}," so procedures never crash on missing fields — the wide event simply isn't emitted and drain\u002Fenrich aren't called.",[637,3246,3248],{"id":3247},"run-locally","Run Locally",[649,3250,3253],{"className":651,"code":3251,"filename":3252,"language":654,"meta":655,"style":655},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\npnpm install\npnpm example orpc\n","Terminal",[543,3254,3255,3266,3274,3281],{"__ignoreMap":655},[659,3256,3257,3260,3263],{"class":661,"line":662},[659,3258,3259],{"class":665},"git",[659,3261,3262],{"class":668}," clone",[659,3264,3265],{"class":668}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[659,3267,3268,3271],{"class":661,"line":768},[659,3269,3270],{"class":853},"cd",[659,3272,3273],{"class":668}," evlog\n",[659,3275,3276,3278],{"class":661,"line":789},[659,3277,653],{"class":665},[659,3279,3280],{"class":668}," install\n",[659,3282,3283,3285,3288],{"class":661,"line":810},[659,3284,653],{"class":665},[659,3286,3287],{"class":668}," example",[659,3289,3290],{"class":668}," orpc\n",[540,3292,3293,3294,3298],{},"Open ",[581,3295,3296],{"href":3296,"rel":3297},"http:\u002F\u002Flocalhost:3000",[585]," to explore the interactive test UI.",[3300,3301,3302],"card-group",{},[3303,3304,3308],"card",{"icon":3305,"title":3306,"to":3307},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Forpc","Browse the complete oRPC example source on GitHub.",[637,3310,3312],{"id":3311},"next-steps","Next Steps",[540,3314,3315,3316,3318],{},"Deepen your ",[576,3317,299],{}," integration:",[600,3320,3321,3326,3331,3336],{},[603,3322,3323,3325],{},[581,3324,46],{"href":47},": Design comprehensive events with context layering",[603,3327,3328,3330],{},[581,3329,138],{"href":143},": Send logs to Axiom, Sentry, PostHog, and more",[603,3332,3333,3335],{},[581,3334,61],{"href":62},": Control log volume with head and tail sampling",[603,3337,3338,3340,3341,554,3343,2023,3345,3347],{},[581,3339,51],{"href":52},": Throw errors with ",[543,3342,2019],{},[543,3344,2022],{},[543,3346,2026],{}," fields",[3349,3350,3351],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":655,"searchDepth":768,"depth":768,"links":3353},[3354,3358,3359,3360,3361,3362,3365,3366,3367,3368],{"id":639,"depth":768,"text":25,"children":3355},[3356,3357],{"id":643,"depth":789,"text":644},{"id":727,"depth":789,"text":728},{"id":1284,"depth":768,"text":46},{"id":1704,"depth":768,"text":1705},{"id":2009,"depth":768,"text":2010},{"id":2545,"depth":768,"text":504},{"id":2558,"depth":768,"text":2559,"children":3363},[3364],{"id":2742,"depth":789,"text":2743},{"id":2958,"depth":768,"text":2959},{"id":3078,"depth":768,"text":3079},{"id":3247,"depth":768,"text":3248},{"id":3311,"depth":768,"text":3312},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.","md",[3372],{"label":3306,"icon":3305,"to":3307,"color":3373,"variant":3374},"neutral","subtle",{},{"title":299,"icon":302},{"title":299,"description":3369},"gyncde24bawCNEH50sjk2x71RzNmXEaFaer2u1Zpvv4",[3380,3382],{"title":294,"path":295,"stem":296,"description":3381,"icon":297,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":304,"path":305,"stem":306,"description":3383,"icon":307,"children":-1},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.",1786743664019]