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