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