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