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