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