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