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