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