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