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