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