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