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