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