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