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