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