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