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