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