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