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