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