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