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