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