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