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