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