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