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