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