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