[{"data":1,"prerenderedAt":6754},["ShallowReactive",2],{"navigation_docs":3,"-extend-drain-pipeline":607,"-extend-drain-pipeline-surround":6749},[4,35,85,143,323,484,543,582],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":109,"path":110,"stem":111,"icon":112},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":114,"path":115,"stem":116,"icon":117},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":119,"path":120,"stem":121,"icon":122},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":124,"path":125,"stem":126,"icon":127},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":129,"path":130,"stem":131,"icon":132},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":134,"path":135,"stem":136,"icon":137},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":139,"path":140,"stem":141,"icon":142},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":144,"path":145,"stem":146,"children":147,"page":34},"Integrate","\u002Fintegrate","4.integrate",[148,152,235],{"title":41,"path":149,"stem":150,"icon":151},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":153,"path":154,"stem":155,"children":156,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[157,160,190,215],{"title":41,"path":158,"stem":159,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":161,"path":162,"stem":163,"children":164,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[165,170,175,180,185],{"title":166,"path":167,"stem":168,"icon":169},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":171,"path":172,"stem":173,"icon":174},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":176,"path":177,"stem":178,"icon":179},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":181,"path":182,"stem":183,"icon":184},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":186,"path":187,"stem":188,"icon":189},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":191,"path":192,"stem":193,"children":194,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[195,200,205,210],{"title":196,"path":197,"stem":198,"icon":199},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":201,"path":202,"stem":203,"icon":204},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":206,"path":207,"stem":208,"icon":209},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":211,"path":212,"stem":213,"icon":214},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":216,"path":217,"stem":218,"children":219,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[220,225,230],{"title":221,"path":222,"stem":223,"icon":224},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":226,"path":227,"stem":228,"icon":229},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":231,"path":232,"stem":233,"icon":234},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":236,"path":237,"stem":238,"children":239,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[240,244,249,254,259,264,269,274,279,284,289,294,299,304,308,313,318],{"title":41,"path":241,"stem":242,"icon":243},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":245,"path":246,"stem":247,"icon":248},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":250,"path":251,"stem":252,"icon":253},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":255,"path":256,"stem":257,"icon":258},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":260,"path":261,"stem":262,"icon":263},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":265,"path":266,"stem":267,"icon":268},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":270,"path":271,"stem":272,"icon":273},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":275,"path":276,"stem":277,"icon":278},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":280,"path":281,"stem":282,"icon":283},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":285,"path":286,"stem":287,"icon":288},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":290,"path":291,"stem":292,"icon":293},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":295,"path":296,"stem":297,"icon":298},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":300,"path":301,"stem":302,"icon":303},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":305,"path":306,"stem":307,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":309,"path":310,"stem":311,"icon":312},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":314,"path":315,"stem":316,"icon":317},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":319,"path":320,"stem":321,"icon":322},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":324,"path":325,"stem":326,"children":327,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[328,331,336,364,391,423,444,449,454,458],{"title":41,"path":329,"stem":330,"icon":112},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":332,"path":333,"stem":334,"icon":335},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":337,"icon":338,"path":339,"stem":340,"children":341,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[342,345,350,355,360],{"title":41,"path":343,"stem":344,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":346,"path":347,"stem":348,"icon":349},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":351,"path":352,"stem":353,"icon":354},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":356,"path":357,"stem":358,"icon":359},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":361,"path":362,"stem":363,"icon":142},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":365,"icon":366,"path":367,"stem":368,"children":369,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[370,373,378,383,387],{"title":41,"path":371,"stem":372,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":374,"path":375,"stem":376,"icon":377},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":379,"path":380,"stem":381,"icon":382},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":384,"path":385,"stem":386,"icon":335},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":388,"path":389,"stem":390,"icon":117},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":392,"icon":393,"path":394,"stem":395,"children":396,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[397,400,405,410,415,419],{"title":41,"path":398,"stem":399,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":401,"path":402,"stem":403,"icon":404},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":406,"path":407,"stem":408,"icon":409},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":411,"path":412,"stem":413,"icon":414},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":416,"path":417,"stem":418,"icon":393},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":420,"path":421,"stem":422,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":361,"icon":117,"path":424,"stem":425,"children":426,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[427,430,435,440],{"title":41,"path":428,"stem":429,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":431,"path":432,"stem":433,"icon":434},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":436,"path":437,"stem":438,"icon":439},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":441,"path":442,"stem":443,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":445,"path":446,"stem":447,"icon":448},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":450,"path":451,"stem":452,"icon":453},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":455,"path":456,"stem":457,"icon":439},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":459,"icon":460,"path":461,"stem":462,"children":463,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[464,467,472,477,480],{"title":41,"path":465,"stem":466,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":468,"path":469,"stem":470,"icon":471},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":473,"path":474,"stem":475,"icon":476},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":441,"path":478,"stem":479,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":420,"path":481,"stem":482,"icon":483},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":485,"path":486,"stem":487,"children":488,"page":34},"Extend","\u002Fextend","6.extend",[489,493,498,503,507,512,516,520,524,528,533,538],{"title":41,"path":490,"stem":491,"icon":492},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":494,"path":495,"stem":496,"icon":497},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":499,"path":500,"stem":501,"icon":502},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":504,"path":505,"stem":506,"icon":497},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":508,"path":509,"stem":510,"icon":511},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":420,"path":513,"stem":514,"icon":515},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":517,"path":518,"stem":519,"icon":492},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":521,"path":522,"stem":523,"icon":448},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":525,"path":526,"stem":527,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":529,"path":530,"stem":531,"icon":532},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":534,"path":535,"stem":536,"icon":537},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":539,"path":540,"stem":541,"icon":542},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":441,"path":544,"stem":545,"children":546,"page":34},"\u002Freference","7.reference",[547,551,556,559,564,568,573,577],{"title":41,"path":548,"stem":549,"icon":550},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":552,"path":553,"stem":554,"icon":555},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":388,"path":557,"stem":558,"icon":117},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":560,"path":561,"stem":562,"icon":563},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":565,"path":566,"stem":567,"icon":393},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":569,"path":570,"stem":571,"icon":572},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":574,"path":575,"stem":576,"icon":448},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":578,"path":579,"stem":580,"icon":581},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":583,"path":584,"stem":585,"children":586,"page":34},"Compare","\u002Fcompare","8.compare",[587,591,595,599,603],{"title":588,"path":589,"stem":590,"icon":572},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":592,"path":593,"stem":594,"icon":209},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":596,"path":597,"stem":598,"icon":572},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":600,"path":601,"stem":602,"icon":572},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":604,"path":605,"stem":606,"icon":572},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":608,"title":609,"body":610,"description":6738,"extension":6739,"links":6740,"meta":6745,"navigation":6746,"path":540,"seo":6747,"stem":541,"__hash__":6748},"docs\u002F6.extend\u002F9.drain-pipeline.md","Drain Pipeline",{"type":611,"value":612,"toc":6709},"minimark",[613,623,626,688,788,792,795,3495,3514,3518,3543,3548,3573,3576,3894,3898,4035,4039,4094,4098,4105,4178,4181,4212,4227,4230,4233,4240,4309,4313,4734,4738,4761,4765,4768,5038,5044,5048,5051,5286,5295,5298,5313,5336,5397,5400,5556,5560,5602,5606,5613,5625,5806,5812,5815,6002,6006,6012,6121,6127,6189,6193,6206,6211,6215,6218,6309,6332,6336,6342,6624,6633,6637,6671,6675,6705],[614,615,616,617,622],"p",{},"In production, sending one HTTP request per emitted event doesn't scale. The drain pipeline buffers events and sends them in batches, retries on transient failures, drops the oldest events when the buffer overflows, and lets a single drain function fan out to several destinations in parallel. The same pipeline powers the ",[618,619,621],"a",{"href":620},"#http-drain-browser-to-server","HTTP browser drain"," used for client-side logs.",[624,625],"drain-pipeline-batching",{},[627,628,629,642],"table",{},[630,631,632],"thead",{},[633,634,635,639],"tr",{},[636,637,638],"th",{},"You want to…",[636,640,641],{},"See",[643,644,645,657,668,678],"tbody",{},[633,646,647,651],{},[648,649,650],"td",{},"Wrap any drain in batch + retry + buffer",[648,652,653],{},[618,654,656],{"href":655},"#quick-start","Quick start",[633,658,659,662],{},[648,660,661],{},"Send each event to several destinations in parallel",[648,663,664],{},[618,665,667],{"href":666},"#fanout","Fanout",[633,669,670,673],{},[648,671,672],{},"Ship browser logs to your server endpoint",[648,674,675],{},[618,676,677],{"href":620},"HTTP drain (browser to server)",[633,679,680,683],{},[648,681,682],{},"Tune batch size, retry strategy, buffer size",[648,684,685],{},[618,686,552],{"href":687},"#configuration",[689,690,693,696,775],"prompt",{":actions":691,"description":692,"icon":542},"[\"copy\",\"cursor\",\"claude\"]","Add the drain pipeline (batch + retry + fanout)",[614,694,695],{},"Wrap my evlog drain in the shared pipeline so it batches, retries, and survives transient failures.",[697,698,699,711,717,735,746,772],"ul",{},[700,701,702,703,707,708],"li",{},"Import ",[704,705,706],"code",{},"createDrainPipeline"," from ",[704,709,710],{},"evlog\u002Fpipeline",[700,712,713,714],{},"Wrap the underlying drain: ",[704,715,716],{},"const drain = createDrainPipeline\u003CDrainContext>()(createAxiomDrain())",[700,718,719,720,723,724,727,728,731,732],{},"Configure ",[704,721,722],{},"batch"," (size + intervalMs), ",[704,725,726],{},"retry"," (maxAttempts + backoff), and ",[704,729,730],{},"maxBufferSize"," (oldest events drop on overflow). Sane defaults: ",[704,733,734],{},"{ batch: { size: 50, intervalMs: 5000 }, retry: { maxAttempts: 3 } }",[700,736,737,738,741,742,745],{},"For multiple destinations, write a single drain function that fans out internally with ",[704,739,740],{},"Promise.allSettled([drainA(batch), drainB(batch)])"," and pass that to ",[704,743,744],{},"pipeline(...)",". One shared buffer, one shared retry budget",[700,747,748,749,752,753,756,757,760,761,764,765,768,769],{},"On shutdown, call ",[704,750,751],{},"drain.flush()"," to push buffered events (Nitro ",[704,754,755],{},"close"," hook, Standalone before ",[704,758,759],{},"process.exit","). On serverless, passing the pipeline as the ",[704,762,763],{},"drain"," option is enough: the middleware registers ",[704,766,767],{},"drain.settled()"," with the runtime's ",[704,770,771],{},"waitUntil",[700,773,774],{},"Always use the pipeline in production. Direct drains make one HTTP call per event and fall over fast",[614,776,777,778,783,784],{},"Docs: ",[618,779,780],{"href":780,"rel":781},"https:\u002F\u002Fwww.evlog.dev\u002Fextend\u002Fdrain-pipeline",[782],"nofollow","\nAdapters: ",[618,785,786],{"href":786,"rel":787},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[782],[789,790,656],"h2",{"id":791},"quick-start",[614,793,794],{},"The pipeline wraps any drain. The wiring depends on your framework, so pick the tab that matches yours; every other example below uses the same shape.",[796,797,798,1057,1267,1493,1687,1893,2100,2282,2460,2642,2820,2998,3187,3331],"framework-tabs",{},[799,800,806],"pre",{"className":801,"code":802,"filename":245,"language":803,"meta":804,"style":805},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n","typescript","server\u002Fplugins\u002Fevlog-drain.ts","",[704,807,808,844,864,885,892,924,952,972,977,1012,1049],{"__ignoreMap":805},[809,810,813,817,820,824,828,831,834,837,841],"span",{"class":811,"line":812},"line",1,[809,814,816],{"class":815},"s7zQu","import",[809,818,819],{"class":815}," type",[809,821,823],{"class":822},"sMK4o"," {",[809,825,827],{"class":826},"sTEyZ"," DrainContext",[809,829,830],{"class":822}," }",[809,832,833],{"class":815}," from",[809,835,836],{"class":822}," '",[809,838,840],{"class":839},"sfazB","evlog",[809,842,843],{"class":822},"'\n",[809,845,847,849,851,854,856,858,860,862],{"class":811,"line":846},2,[809,848,816],{"class":815},[809,850,823],{"class":822},[809,852,853],{"class":826}," createDrainPipeline",[809,855,830],{"class":822},[809,857,833],{"class":815},[809,859,836],{"class":822},[809,861,710],{"class":839},[809,863,843],{"class":822},[809,865,867,869,871,874,876,878,880,883],{"class":811,"line":866},3,[809,868,816],{"class":815},[809,870,823],{"class":822},[809,872,873],{"class":826}," createAxiomDrain",[809,875,830],{"class":822},[809,877,833],{"class":815},[809,879,836],{"class":822},[809,881,882],{"class":839},"evlog\u002Faxiom",[809,884,843],{"class":822},[809,886,888],{"class":811,"line":887},4,[809,889,891],{"emptyLinePlaceholder":890},true,"\n",[809,893,895,898,901,905,908,910,914,917,921],{"class":811,"line":894},5,[809,896,897],{"class":815},"export",[809,899,900],{"class":815}," default",[809,902,904],{"class":903},"s2Zo4"," defineNitroPlugin",[809,906,907],{"class":826},"(",[809,909,907],{"class":822},[809,911,913],{"class":912},"sHdIc","nitroApp",[809,915,916],{"class":822},")",[809,918,920],{"class":919},"spNyl"," =>",[809,922,923],{"class":822}," {\n",[809,925,927,930,933,936,938,941,945,948],{"class":811,"line":926},6,[809,928,929],{"class":919},"  const",[809,931,932],{"class":826}," pipeline",[809,934,935],{"class":822}," =",[809,937,853],{"class":903},[809,939,940],{"class":822},"\u003C",[809,942,944],{"class":943},"sBMFI","DrainContext",[809,946,947],{"class":822},">",[809,949,951],{"class":950},"swJcz","()\n",[809,953,955,957,960,962,964,966,969],{"class":811,"line":954},7,[809,956,929],{"class":919},[809,958,959],{"class":826}," drain",[809,961,935],{"class":822},[809,963,932],{"class":903},[809,965,907],{"class":950},[809,967,968],{"class":903},"createAxiomDrain",[809,970,971],{"class":950},"())\n",[809,973,975],{"class":811,"line":974},8,[809,976,891],{"emptyLinePlaceholder":890},[809,978,980,983,986,989,991,994,996,999,1002,1004,1007,1009],{"class":811,"line":979},9,[809,981,982],{"class":826},"  nitroApp",[809,984,985],{"class":822},".",[809,987,988],{"class":826},"hooks",[809,990,985],{"class":822},[809,992,993],{"class":903},"hook",[809,995,907],{"class":950},[809,997,998],{"class":822},"'",[809,1000,1001],{"class":839},"evlog:drain",[809,1003,998],{"class":822},[809,1005,1006],{"class":822},",",[809,1008,959],{"class":826},[809,1010,1011],{"class":950},")\n",[809,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1038,1040,1042,1044,1047],{"class":811,"line":1014},10,[809,1016,982],{"class":826},[809,1018,985],{"class":822},[809,1020,988],{"class":826},[809,1022,985],{"class":822},[809,1024,993],{"class":903},[809,1026,907],{"class":950},[809,1028,998],{"class":822},[809,1030,755],{"class":839},[809,1032,998],{"class":822},[809,1034,1006],{"class":822},[809,1036,1037],{"class":822}," ()",[809,1039,920],{"class":919},[809,1041,959],{"class":826},[809,1043,985],{"class":822},[809,1045,1046],{"class":903},"flush",[809,1048,971],{"class":950},[809,1050,1052,1055],{"class":811,"line":1051},11,[809,1053,1054],{"class":822},"}",[809,1056,1011],{"class":826},[799,1058,1060],{"className":801,"code":1059,"filename":260,"language":803,"meta":804,"style":805},"import { definePlugin } from 'nitro'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default definePlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n",[704,1061,1062,1082,1102,1120,1138,1142,1162,1180,1196,1200,1226,1260],{"__ignoreMap":805},[809,1063,1064,1066,1068,1071,1073,1075,1077,1080],{"class":811,"line":812},[809,1065,816],{"class":815},[809,1067,823],{"class":822},[809,1069,1070],{"class":826}," definePlugin",[809,1072,830],{"class":822},[809,1074,833],{"class":815},[809,1076,836],{"class":822},[809,1078,1079],{"class":839},"nitro",[809,1081,843],{"class":822},[809,1083,1084,1086,1088,1090,1092,1094,1096,1098,1100],{"class":811,"line":846},[809,1085,816],{"class":815},[809,1087,819],{"class":815},[809,1089,823],{"class":822},[809,1091,827],{"class":826},[809,1093,830],{"class":822},[809,1095,833],{"class":815},[809,1097,836],{"class":822},[809,1099,840],{"class":839},[809,1101,843],{"class":822},[809,1103,1104,1106,1108,1110,1112,1114,1116,1118],{"class":811,"line":866},[809,1105,816],{"class":815},[809,1107,823],{"class":822},[809,1109,853],{"class":826},[809,1111,830],{"class":822},[809,1113,833],{"class":815},[809,1115,836],{"class":822},[809,1117,710],{"class":839},[809,1119,843],{"class":822},[809,1121,1122,1124,1126,1128,1130,1132,1134,1136],{"class":811,"line":887},[809,1123,816],{"class":815},[809,1125,823],{"class":822},[809,1127,873],{"class":826},[809,1129,830],{"class":822},[809,1131,833],{"class":815},[809,1133,836],{"class":822},[809,1135,882],{"class":839},[809,1137,843],{"class":822},[809,1139,1140],{"class":811,"line":894},[809,1141,891],{"emptyLinePlaceholder":890},[809,1143,1144,1146,1148,1150,1152,1154,1156,1158,1160],{"class":811,"line":926},[809,1145,897],{"class":815},[809,1147,900],{"class":815},[809,1149,1070],{"class":903},[809,1151,907],{"class":826},[809,1153,907],{"class":822},[809,1155,913],{"class":912},[809,1157,916],{"class":822},[809,1159,920],{"class":919},[809,1161,923],{"class":822},[809,1163,1164,1166,1168,1170,1172,1174,1176,1178],{"class":811,"line":954},[809,1165,929],{"class":919},[809,1167,932],{"class":826},[809,1169,935],{"class":822},[809,1171,853],{"class":903},[809,1173,940],{"class":822},[809,1175,944],{"class":943},[809,1177,947],{"class":822},[809,1179,951],{"class":950},[809,1181,1182,1184,1186,1188,1190,1192,1194],{"class":811,"line":974},[809,1183,929],{"class":919},[809,1185,959],{"class":826},[809,1187,935],{"class":822},[809,1189,932],{"class":903},[809,1191,907],{"class":950},[809,1193,968],{"class":903},[809,1195,971],{"class":950},[809,1197,1198],{"class":811,"line":979},[809,1199,891],{"emptyLinePlaceholder":890},[809,1201,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224],{"class":811,"line":1014},[809,1203,982],{"class":826},[809,1205,985],{"class":822},[809,1207,988],{"class":826},[809,1209,985],{"class":822},[809,1211,993],{"class":903},[809,1213,907],{"class":950},[809,1215,998],{"class":822},[809,1217,1001],{"class":839},[809,1219,998],{"class":822},[809,1221,1006],{"class":822},[809,1223,959],{"class":826},[809,1225,1011],{"class":950},[809,1227,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258],{"class":811,"line":1051},[809,1229,982],{"class":826},[809,1231,985],{"class":822},[809,1233,988],{"class":826},[809,1235,985],{"class":822},[809,1237,993],{"class":903},[809,1239,907],{"class":950},[809,1241,998],{"class":822},[809,1243,755],{"class":839},[809,1245,998],{"class":822},[809,1247,1006],{"class":822},[809,1249,1037],{"class":822},[809,1251,920],{"class":919},[809,1253,959],{"class":826},[809,1255,985],{"class":822},[809,1257,1046],{"class":903},[809,1259,971],{"class":950},[809,1261,1263,1265],{"class":811,"line":1262},12,[809,1264,1054],{"class":822},[809,1266,1011],{"class":826},[799,1268,1271],{"className":801,"code":1269,"filename":250,"language":803,"meta":1270,"style":805},"import type { DrainContext } from 'evlog'\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain,\n})\n\nexport const flushEvlog = () => drain.flush()\n","lib\u002Fevlog.ts",[704,1272,1273,1293,1313,1331,1349,1353,1374,1391,1395,1433,1451,1458,1464,1469],{"__ignoreMap":805},[809,1274,1275,1277,1279,1281,1283,1285,1287,1289,1291],{"class":811,"line":812},[809,1276,816],{"class":815},[809,1278,819],{"class":815},[809,1280,823],{"class":822},[809,1282,827],{"class":826},[809,1284,830],{"class":822},[809,1286,833],{"class":815},[809,1288,836],{"class":822},[809,1290,840],{"class":839},[809,1292,843],{"class":822},[809,1294,1295,1297,1299,1302,1304,1306,1308,1311],{"class":811,"line":846},[809,1296,816],{"class":815},[809,1298,823],{"class":822},[809,1300,1301],{"class":826}," createEvlog",[809,1303,830],{"class":822},[809,1305,833],{"class":815},[809,1307,836],{"class":822},[809,1309,1310],{"class":839},"evlog\u002Fnext",[809,1312,843],{"class":822},[809,1314,1315,1317,1319,1321,1323,1325,1327,1329],{"class":811,"line":866},[809,1316,816],{"class":815},[809,1318,823],{"class":822},[809,1320,853],{"class":826},[809,1322,830],{"class":822},[809,1324,833],{"class":815},[809,1326,836],{"class":822},[809,1328,710],{"class":839},[809,1330,843],{"class":822},[809,1332,1333,1335,1337,1339,1341,1343,1345,1347],{"class":811,"line":887},[809,1334,816],{"class":815},[809,1336,823],{"class":822},[809,1338,873],{"class":826},[809,1340,830],{"class":822},[809,1342,833],{"class":815},[809,1344,836],{"class":822},[809,1346,882],{"class":839},[809,1348,843],{"class":822},[809,1350,1351],{"class":811,"line":894},[809,1352,891],{"emptyLinePlaceholder":890},[809,1354,1355,1358,1361,1364,1366,1368,1370,1372],{"class":811,"line":926},[809,1356,1357],{"class":919},"const",[809,1359,1360],{"class":826}," pipeline ",[809,1362,1363],{"class":822},"=",[809,1365,853],{"class":903},[809,1367,940],{"class":822},[809,1369,944],{"class":943},[809,1371,947],{"class":822},[809,1373,951],{"class":826},[809,1375,1376,1378,1381,1383,1385,1387,1389],{"class":811,"line":954},[809,1377,1357],{"class":919},[809,1379,1380],{"class":826}," drain ",[809,1382,1363],{"class":822},[809,1384,932],{"class":903},[809,1386,907],{"class":826},[809,1388,968],{"class":903},[809,1390,971],{"class":826},[809,1392,1393],{"class":811,"line":974},[809,1394,891],{"emptyLinePlaceholder":890},[809,1396,1397,1399,1402,1404,1407,1409,1412,1414,1417,1419,1422,1424,1426,1428,1430],{"class":811,"line":979},[809,1398,897],{"class":815},[809,1400,1401],{"class":919}," const",[809,1403,823],{"class":822},[809,1405,1406],{"class":826}," withEvlog",[809,1408,1006],{"class":822},[809,1410,1411],{"class":826}," useLogger",[809,1413,1006],{"class":822},[809,1415,1416],{"class":826}," log",[809,1418,1006],{"class":822},[809,1420,1421],{"class":826}," createError ",[809,1423,1054],{"class":822},[809,1425,935],{"class":822},[809,1427,1301],{"class":903},[809,1429,907],{"class":826},[809,1431,1432],{"class":822},"{\n",[809,1434,1435,1438,1441,1443,1446,1448],{"class":811,"line":1014},[809,1436,1437],{"class":950},"  service",[809,1439,1440],{"class":822},":",[809,1442,836],{"class":822},[809,1444,1445],{"class":839},"my-app",[809,1447,998],{"class":822},[809,1449,1450],{"class":822},",\n",[809,1452,1453,1456],{"class":811,"line":1051},[809,1454,1455],{"class":826},"  drain",[809,1457,1450],{"class":822},[809,1459,1460,1462],{"class":811,"line":1262},[809,1461,1054],{"class":822},[809,1463,1011],{"class":826},[809,1465,1467],{"class":811,"line":1466},13,[809,1468,891],{"emptyLinePlaceholder":890},[809,1470,1472,1474,1476,1479,1481,1483,1485,1487,1489,1491],{"class":811,"line":1471},14,[809,1473,897],{"class":815},[809,1475,1401],{"class":919},[809,1477,1478],{"class":826}," flushEvlog ",[809,1480,1363],{"class":822},[809,1482,1037],{"class":822},[809,1484,920],{"class":919},[809,1486,959],{"class":826},[809,1488,985],{"class":822},[809,1490,1046],{"class":903},[809,1492,951],{"class":826},[799,1494,1497],{"className":801,"code":1495,"filename":255,"language":803,"meta":1496,"style":805},"import { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const { handle, handleError } = createEvlogHooks({ drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Fhooks.server.ts",[704,1498,1499,1519,1539,1557,1575,1579,1597,1613,1617,1650,1654],{"__ignoreMap":805},[809,1500,1501,1503,1505,1508,1510,1512,1514,1517],{"class":811,"line":812},[809,1502,816],{"class":815},[809,1504,823],{"class":822},[809,1506,1507],{"class":826}," createEvlogHooks",[809,1509,830],{"class":822},[809,1511,833],{"class":815},[809,1513,836],{"class":822},[809,1515,1516],{"class":839},"evlog\u002Fsveltekit",[809,1518,843],{"class":822},[809,1520,1521,1523,1525,1527,1529,1531,1533,1535,1537],{"class":811,"line":846},[809,1522,816],{"class":815},[809,1524,819],{"class":815},[809,1526,823],{"class":822},[809,1528,827],{"class":826},[809,1530,830],{"class":822},[809,1532,833],{"class":815},[809,1534,836],{"class":822},[809,1536,840],{"class":839},[809,1538,843],{"class":822},[809,1540,1541,1543,1545,1547,1549,1551,1553,1555],{"class":811,"line":866},[809,1542,816],{"class":815},[809,1544,823],{"class":822},[809,1546,853],{"class":826},[809,1548,830],{"class":822},[809,1550,833],{"class":815},[809,1552,836],{"class":822},[809,1554,710],{"class":839},[809,1556,843],{"class":822},[809,1558,1559,1561,1563,1565,1567,1569,1571,1573],{"class":811,"line":887},[809,1560,816],{"class":815},[809,1562,823],{"class":822},[809,1564,873],{"class":826},[809,1566,830],{"class":822},[809,1568,833],{"class":815},[809,1570,836],{"class":822},[809,1572,882],{"class":839},[809,1574,843],{"class":822},[809,1576,1577],{"class":811,"line":894},[809,1578,891],{"emptyLinePlaceholder":890},[809,1580,1581,1583,1585,1587,1589,1591,1593,1595],{"class":811,"line":926},[809,1582,1357],{"class":919},[809,1584,1360],{"class":826},[809,1586,1363],{"class":822},[809,1588,853],{"class":903},[809,1590,940],{"class":822},[809,1592,944],{"class":943},[809,1594,947],{"class":822},[809,1596,951],{"class":826},[809,1598,1599,1601,1603,1605,1607,1609,1611],{"class":811,"line":954},[809,1600,1357],{"class":919},[809,1602,1380],{"class":826},[809,1604,1363],{"class":822},[809,1606,932],{"class":903},[809,1608,907],{"class":826},[809,1610,968],{"class":903},[809,1612,971],{"class":826},[809,1614,1615],{"class":811,"line":974},[809,1616,891],{"emptyLinePlaceholder":890},[809,1618,1619,1621,1623,1625,1628,1630,1633,1635,1637,1639,1641,1644,1646,1648],{"class":811,"line":979},[809,1620,897],{"class":815},[809,1622,1401],{"class":919},[809,1624,823],{"class":822},[809,1626,1627],{"class":826}," handle",[809,1629,1006],{"class":822},[809,1631,1632],{"class":826}," handleError ",[809,1634,1054],{"class":822},[809,1636,935],{"class":822},[809,1638,1507],{"class":903},[809,1640,907],{"class":826},[809,1642,1643],{"class":822},"{",[809,1645,1380],{"class":826},[809,1647,1054],{"class":822},[809,1649,1011],{"class":826},[809,1651,1652],{"class":811,"line":1014},[809,1653,891],{"emptyLinePlaceholder":890},[809,1655,1656,1659,1661,1664,1666,1668,1671,1673,1675,1677,1679,1681,1683,1685],{"class":811,"line":1051},[809,1657,1658],{"class":826},"process",[809,1660,985],{"class":822},[809,1662,1663],{"class":903},"on",[809,1665,907],{"class":826},[809,1667,998],{"class":822},[809,1669,1670],{"class":839},"SIGTERM",[809,1672,998],{"class":822},[809,1674,1006],{"class":822},[809,1676,1037],{"class":822},[809,1678,920],{"class":919},[809,1680,959],{"class":826},[809,1682,985],{"class":822},[809,1684,1046],{"class":903},[809,1686,971],{"class":826},[799,1688,1689],{"className":801,"code":1059,"filename":265,"language":803,"meta":804,"style":805},[704,1690,1691,1709,1729,1747,1765,1769,1789,1807,1823,1827,1853,1887],{"__ignoreMap":805},[809,1692,1693,1695,1697,1699,1701,1703,1705,1707],{"class":811,"line":812},[809,1694,816],{"class":815},[809,1696,823],{"class":822},[809,1698,1070],{"class":826},[809,1700,830],{"class":822},[809,1702,833],{"class":815},[809,1704,836],{"class":822},[809,1706,1079],{"class":839},[809,1708,843],{"class":822},[809,1710,1711,1713,1715,1717,1719,1721,1723,1725,1727],{"class":811,"line":846},[809,1712,816],{"class":815},[809,1714,819],{"class":815},[809,1716,823],{"class":822},[809,1718,827],{"class":826},[809,1720,830],{"class":822},[809,1722,833],{"class":815},[809,1724,836],{"class":822},[809,1726,840],{"class":839},[809,1728,843],{"class":822},[809,1730,1731,1733,1735,1737,1739,1741,1743,1745],{"class":811,"line":866},[809,1732,816],{"class":815},[809,1734,823],{"class":822},[809,1736,853],{"class":826},[809,1738,830],{"class":822},[809,1740,833],{"class":815},[809,1742,836],{"class":822},[809,1744,710],{"class":839},[809,1746,843],{"class":822},[809,1748,1749,1751,1753,1755,1757,1759,1761,1763],{"class":811,"line":887},[809,1750,816],{"class":815},[809,1752,823],{"class":822},[809,1754,873],{"class":826},[809,1756,830],{"class":822},[809,1758,833],{"class":815},[809,1760,836],{"class":822},[809,1762,882],{"class":839},[809,1764,843],{"class":822},[809,1766,1767],{"class":811,"line":894},[809,1768,891],{"emptyLinePlaceholder":890},[809,1770,1771,1773,1775,1777,1779,1781,1783,1785,1787],{"class":811,"line":926},[809,1772,897],{"class":815},[809,1774,900],{"class":815},[809,1776,1070],{"class":903},[809,1778,907],{"class":826},[809,1780,907],{"class":822},[809,1782,913],{"class":912},[809,1784,916],{"class":822},[809,1786,920],{"class":919},[809,1788,923],{"class":822},[809,1790,1791,1793,1795,1797,1799,1801,1803,1805],{"class":811,"line":954},[809,1792,929],{"class":919},[809,1794,932],{"class":826},[809,1796,935],{"class":822},[809,1798,853],{"class":903},[809,1800,940],{"class":822},[809,1802,944],{"class":943},[809,1804,947],{"class":822},[809,1806,951],{"class":950},[809,1808,1809,1811,1813,1815,1817,1819,1821],{"class":811,"line":974},[809,1810,929],{"class":919},[809,1812,959],{"class":826},[809,1814,935],{"class":822},[809,1816,932],{"class":903},[809,1818,907],{"class":950},[809,1820,968],{"class":903},[809,1822,971],{"class":950},[809,1824,1825],{"class":811,"line":979},[809,1826,891],{"emptyLinePlaceholder":890},[809,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851],{"class":811,"line":1014},[809,1830,982],{"class":826},[809,1832,985],{"class":822},[809,1834,988],{"class":826},[809,1836,985],{"class":822},[809,1838,993],{"class":903},[809,1840,907],{"class":950},[809,1842,998],{"class":822},[809,1844,1001],{"class":839},[809,1846,998],{"class":822},[809,1848,1006],{"class":822},[809,1850,959],{"class":826},[809,1852,1011],{"class":950},[809,1854,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885],{"class":811,"line":1051},[809,1856,982],{"class":826},[809,1858,985],{"class":822},[809,1860,988],{"class":826},[809,1862,985],{"class":822},[809,1864,993],{"class":903},[809,1866,907],{"class":950},[809,1868,998],{"class":822},[809,1870,755],{"class":839},[809,1872,998],{"class":822},[809,1874,1006],{"class":822},[809,1876,1037],{"class":822},[809,1878,920],{"class":919},[809,1880,959],{"class":826},[809,1882,985],{"class":822},[809,1884,1046],{"class":903},[809,1886,971],{"class":950},[809,1888,1889,1891],{"class":811,"line":1262},[809,1890,1054],{"class":822},[809,1892,1011],{"class":826},[799,1894,1897],{"className":801,"code":1895,"filename":295,"language":803,"meta":1896,"style":805},"import { evlog } from 'evlog\u002Freact-router'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog({ drain }),\n]\n\nprocess.on('SIGTERM', () => drain.flush())\n","app\u002Froot.tsx",[704,1898,1899,1919,1939,1957,1975,1979,1997,2013,2017,2044,2061,2066,2070],{"__ignoreMap":805},[809,1900,1901,1903,1905,1908,1910,1912,1914,1917],{"class":811,"line":812},[809,1902,816],{"class":815},[809,1904,823],{"class":822},[809,1906,1907],{"class":826}," evlog",[809,1909,830],{"class":822},[809,1911,833],{"class":815},[809,1913,836],{"class":822},[809,1915,1916],{"class":839},"evlog\u002Freact-router",[809,1918,843],{"class":822},[809,1920,1921,1923,1925,1927,1929,1931,1933,1935,1937],{"class":811,"line":846},[809,1922,816],{"class":815},[809,1924,819],{"class":815},[809,1926,823],{"class":822},[809,1928,827],{"class":826},[809,1930,830],{"class":822},[809,1932,833],{"class":815},[809,1934,836],{"class":822},[809,1936,840],{"class":839},[809,1938,843],{"class":822},[809,1940,1941,1943,1945,1947,1949,1951,1953,1955],{"class":811,"line":866},[809,1942,816],{"class":815},[809,1944,823],{"class":822},[809,1946,853],{"class":826},[809,1948,830],{"class":822},[809,1950,833],{"class":815},[809,1952,836],{"class":822},[809,1954,710],{"class":839},[809,1956,843],{"class":822},[809,1958,1959,1961,1963,1965,1967,1969,1971,1973],{"class":811,"line":887},[809,1960,816],{"class":815},[809,1962,823],{"class":822},[809,1964,873],{"class":826},[809,1966,830],{"class":822},[809,1968,833],{"class":815},[809,1970,836],{"class":822},[809,1972,882],{"class":839},[809,1974,843],{"class":822},[809,1976,1977],{"class":811,"line":894},[809,1978,891],{"emptyLinePlaceholder":890},[809,1980,1981,1983,1985,1987,1989,1991,1993,1995],{"class":811,"line":926},[809,1982,1357],{"class":919},[809,1984,1360],{"class":826},[809,1986,1363],{"class":822},[809,1988,853],{"class":903},[809,1990,940],{"class":822},[809,1992,944],{"class":943},[809,1994,947],{"class":822},[809,1996,951],{"class":826},[809,1998,1999,2001,2003,2005,2007,2009,2011],{"class":811,"line":954},[809,2000,1357],{"class":919},[809,2002,1380],{"class":826},[809,2004,1363],{"class":822},[809,2006,932],{"class":903},[809,2008,907],{"class":826},[809,2010,968],{"class":903},[809,2012,971],{"class":826},[809,2014,2015],{"class":811,"line":974},[809,2016,891],{"emptyLinePlaceholder":890},[809,2018,2019,2021,2023,2026,2028,2031,2033,2036,2039,2041],{"class":811,"line":979},[809,2020,897],{"class":815},[809,2022,1401],{"class":919},[809,2024,2025],{"class":826}," middleware",[809,2027,1440],{"class":822},[809,2029,2030],{"class":943}," Route",[809,2032,985],{"class":822},[809,2034,2035],{"class":943},"MiddlewareFunction",[809,2037,2038],{"class":826},"[] ",[809,2040,1363],{"class":822},[809,2042,2043],{"class":826}," [\n",[809,2045,2046,2049,2051,2053,2055,2057,2059],{"class":811,"line":1014},[809,2047,2048],{"class":903},"  evlog",[809,2050,907],{"class":826},[809,2052,1643],{"class":822},[809,2054,1380],{"class":826},[809,2056,1054],{"class":822},[809,2058,916],{"class":826},[809,2060,1450],{"class":822},[809,2062,2063],{"class":811,"line":1051},[809,2064,2065],{"class":826},"]\n",[809,2067,2068],{"class":811,"line":1262},[809,2069,891],{"emptyLinePlaceholder":890},[809,2071,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098],{"class":811,"line":1466},[809,2073,1658],{"class":826},[809,2075,985],{"class":822},[809,2077,1663],{"class":903},[809,2079,907],{"class":826},[809,2081,998],{"class":822},[809,2083,1670],{"class":839},[809,2085,998],{"class":822},[809,2087,1006],{"class":822},[809,2089,1037],{"class":822},[809,2091,920],{"class":919},[809,2093,959],{"class":826},[809,2095,985],{"class":822},[809,2097,1046],{"class":903},[809,2099,971],{"class":826},[799,2101,2104],{"className":801,"code":2102,"filename":280,"language":803,"meta":2103,"style":805},"import { evlog } from 'evlog\u002Fhono'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Findex.ts",[704,2105,2106,2125,2145,2163,2181,2185,2203,2219,2223,2248,2252],{"__ignoreMap":805},[809,2107,2108,2110,2112,2114,2116,2118,2120,2123],{"class":811,"line":812},[809,2109,816],{"class":815},[809,2111,823],{"class":822},[809,2113,1907],{"class":826},[809,2115,830],{"class":822},[809,2117,833],{"class":815},[809,2119,836],{"class":822},[809,2121,2122],{"class":839},"evlog\u002Fhono",[809,2124,843],{"class":822},[809,2126,2127,2129,2131,2133,2135,2137,2139,2141,2143],{"class":811,"line":846},[809,2128,816],{"class":815},[809,2130,819],{"class":815},[809,2132,823],{"class":822},[809,2134,827],{"class":826},[809,2136,830],{"class":822},[809,2138,833],{"class":815},[809,2140,836],{"class":822},[809,2142,840],{"class":839},[809,2144,843],{"class":822},[809,2146,2147,2149,2151,2153,2155,2157,2159,2161],{"class":811,"line":866},[809,2148,816],{"class":815},[809,2150,823],{"class":822},[809,2152,853],{"class":826},[809,2154,830],{"class":822},[809,2156,833],{"class":815},[809,2158,836],{"class":822},[809,2160,710],{"class":839},[809,2162,843],{"class":822},[809,2164,2165,2167,2169,2171,2173,2175,2177,2179],{"class":811,"line":887},[809,2166,816],{"class":815},[809,2168,823],{"class":822},[809,2170,873],{"class":826},[809,2172,830],{"class":822},[809,2174,833],{"class":815},[809,2176,836],{"class":822},[809,2178,882],{"class":839},[809,2180,843],{"class":822},[809,2182,2183],{"class":811,"line":894},[809,2184,891],{"emptyLinePlaceholder":890},[809,2186,2187,2189,2191,2193,2195,2197,2199,2201],{"class":811,"line":926},[809,2188,1357],{"class":919},[809,2190,1360],{"class":826},[809,2192,1363],{"class":822},[809,2194,853],{"class":903},[809,2196,940],{"class":822},[809,2198,944],{"class":943},[809,2200,947],{"class":822},[809,2202,951],{"class":826},[809,2204,2205,2207,2209,2211,2213,2215,2217],{"class":811,"line":954},[809,2206,1357],{"class":919},[809,2208,1380],{"class":826},[809,2210,1363],{"class":822},[809,2212,932],{"class":903},[809,2214,907],{"class":826},[809,2216,968],{"class":903},[809,2218,971],{"class":826},[809,2220,2221],{"class":811,"line":974},[809,2222,891],{"emptyLinePlaceholder":890},[809,2224,2225,2228,2230,2233,2235,2237,2239,2241,2243,2245],{"class":811,"line":979},[809,2226,2227],{"class":826},"app",[809,2229,985],{"class":822},[809,2231,2232],{"class":903},"use",[809,2234,907],{"class":826},[809,2236,840],{"class":903},[809,2238,907],{"class":826},[809,2240,1643],{"class":822},[809,2242,1380],{"class":826},[809,2244,1054],{"class":822},[809,2246,2247],{"class":826},"))\n",[809,2249,2250],{"class":811,"line":1014},[809,2251,891],{"emptyLinePlaceholder":890},[809,2253,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280],{"class":811,"line":1051},[809,2255,1658],{"class":826},[809,2257,985],{"class":822},[809,2259,1663],{"class":903},[809,2261,907],{"class":826},[809,2263,998],{"class":822},[809,2265,1670],{"class":839},[809,2267,998],{"class":822},[809,2269,1006],{"class":822},[809,2271,1037],{"class":822},[809,2273,920],{"class":919},[809,2275,959],{"class":826},[809,2277,985],{"class":822},[809,2279,1046],{"class":903},[809,2281,971],{"class":826},[799,2283,2285],{"className":801,"code":2284,"filename":275,"language":803,"meta":2103,"style":805},"import { evlog } from 'evlog\u002Fexpress'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n",[704,2286,2287,2306,2326,2344,2362,2366,2384,2400,2404,2426,2430],{"__ignoreMap":805},[809,2288,2289,2291,2293,2295,2297,2299,2301,2304],{"class":811,"line":812},[809,2290,816],{"class":815},[809,2292,823],{"class":822},[809,2294,1907],{"class":826},[809,2296,830],{"class":822},[809,2298,833],{"class":815},[809,2300,836],{"class":822},[809,2302,2303],{"class":839},"evlog\u002Fexpress",[809,2305,843],{"class":822},[809,2307,2308,2310,2312,2314,2316,2318,2320,2322,2324],{"class":811,"line":846},[809,2309,816],{"class":815},[809,2311,819],{"class":815},[809,2313,823],{"class":822},[809,2315,827],{"class":826},[809,2317,830],{"class":822},[809,2319,833],{"class":815},[809,2321,836],{"class":822},[809,2323,840],{"class":839},[809,2325,843],{"class":822},[809,2327,2328,2330,2332,2334,2336,2338,2340,2342],{"class":811,"line":866},[809,2329,816],{"class":815},[809,2331,823],{"class":822},[809,2333,853],{"class":826},[809,2335,830],{"class":822},[809,2337,833],{"class":815},[809,2339,836],{"class":822},[809,2341,710],{"class":839},[809,2343,843],{"class":822},[809,2345,2346,2348,2350,2352,2354,2356,2358,2360],{"class":811,"line":887},[809,2347,816],{"class":815},[809,2349,823],{"class":822},[809,2351,873],{"class":826},[809,2353,830],{"class":822},[809,2355,833],{"class":815},[809,2357,836],{"class":822},[809,2359,882],{"class":839},[809,2361,843],{"class":822},[809,2363,2364],{"class":811,"line":894},[809,2365,891],{"emptyLinePlaceholder":890},[809,2367,2368,2370,2372,2374,2376,2378,2380,2382],{"class":811,"line":926},[809,2369,1357],{"class":919},[809,2371,1360],{"class":826},[809,2373,1363],{"class":822},[809,2375,853],{"class":903},[809,2377,940],{"class":822},[809,2379,944],{"class":943},[809,2381,947],{"class":822},[809,2383,951],{"class":826},[809,2385,2386,2388,2390,2392,2394,2396,2398],{"class":811,"line":954},[809,2387,1357],{"class":919},[809,2389,1380],{"class":826},[809,2391,1363],{"class":822},[809,2393,932],{"class":903},[809,2395,907],{"class":826},[809,2397,968],{"class":903},[809,2399,971],{"class":826},[809,2401,2402],{"class":811,"line":974},[809,2403,891],{"emptyLinePlaceholder":890},[809,2405,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424],{"class":811,"line":979},[809,2407,2227],{"class":826},[809,2409,985],{"class":822},[809,2411,2232],{"class":903},[809,2413,907],{"class":826},[809,2415,840],{"class":903},[809,2417,907],{"class":826},[809,2419,1643],{"class":822},[809,2421,1380],{"class":826},[809,2423,1054],{"class":822},[809,2425,2247],{"class":826},[809,2427,2428],{"class":811,"line":1014},[809,2429,891],{"emptyLinePlaceholder":890},[809,2431,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458],{"class":811,"line":1051},[809,2433,1658],{"class":826},[809,2435,985],{"class":822},[809,2437,1663],{"class":903},[809,2439,907],{"class":826},[809,2441,998],{"class":822},[809,2443,1670],{"class":839},[809,2445,998],{"class":822},[809,2447,1006],{"class":822},[809,2449,1037],{"class":822},[809,2451,920],{"class":919},[809,2453,959],{"class":826},[809,2455,985],{"class":822},[809,2457,1046],{"class":903},[809,2459,971],{"class":826},[799,2461,2463],{"className":801,"code":2462,"filename":285,"language":803,"meta":2103,"style":805},"import { evlog } from 'evlog\u002Ffastify'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nawait app.register(evlog, { drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n",[704,2464,2465,2484,2504,2522,2540,2544,2562,2578,2582,2608,2612],{"__ignoreMap":805},[809,2466,2467,2469,2471,2473,2475,2477,2479,2482],{"class":811,"line":812},[809,2468,816],{"class":815},[809,2470,823],{"class":822},[809,2472,1907],{"class":826},[809,2474,830],{"class":822},[809,2476,833],{"class":815},[809,2478,836],{"class":822},[809,2480,2481],{"class":839},"evlog\u002Ffastify",[809,2483,843],{"class":822},[809,2485,2486,2488,2490,2492,2494,2496,2498,2500,2502],{"class":811,"line":846},[809,2487,816],{"class":815},[809,2489,819],{"class":815},[809,2491,823],{"class":822},[809,2493,827],{"class":826},[809,2495,830],{"class":822},[809,2497,833],{"class":815},[809,2499,836],{"class":822},[809,2501,840],{"class":839},[809,2503,843],{"class":822},[809,2505,2506,2508,2510,2512,2514,2516,2518,2520],{"class":811,"line":866},[809,2507,816],{"class":815},[809,2509,823],{"class":822},[809,2511,853],{"class":826},[809,2513,830],{"class":822},[809,2515,833],{"class":815},[809,2517,836],{"class":822},[809,2519,710],{"class":839},[809,2521,843],{"class":822},[809,2523,2524,2526,2528,2530,2532,2534,2536,2538],{"class":811,"line":887},[809,2525,816],{"class":815},[809,2527,823],{"class":822},[809,2529,873],{"class":826},[809,2531,830],{"class":822},[809,2533,833],{"class":815},[809,2535,836],{"class":822},[809,2537,882],{"class":839},[809,2539,843],{"class":822},[809,2541,2542],{"class":811,"line":894},[809,2543,891],{"emptyLinePlaceholder":890},[809,2545,2546,2548,2550,2552,2554,2556,2558,2560],{"class":811,"line":926},[809,2547,1357],{"class":919},[809,2549,1360],{"class":826},[809,2551,1363],{"class":822},[809,2553,853],{"class":903},[809,2555,940],{"class":822},[809,2557,944],{"class":943},[809,2559,947],{"class":822},[809,2561,951],{"class":826},[809,2563,2564,2566,2568,2570,2572,2574,2576],{"class":811,"line":954},[809,2565,1357],{"class":919},[809,2567,1380],{"class":826},[809,2569,1363],{"class":822},[809,2571,932],{"class":903},[809,2573,907],{"class":826},[809,2575,968],{"class":903},[809,2577,971],{"class":826},[809,2579,2580],{"class":811,"line":974},[809,2581,891],{"emptyLinePlaceholder":890},[809,2583,2584,2587,2590,2592,2595,2598,2600,2602,2604,2606],{"class":811,"line":979},[809,2585,2586],{"class":815},"await",[809,2588,2589],{"class":826}," app",[809,2591,985],{"class":822},[809,2593,2594],{"class":903},"register",[809,2596,2597],{"class":826},"(evlog",[809,2599,1006],{"class":822},[809,2601,823],{"class":822},[809,2603,1380],{"class":826},[809,2605,1054],{"class":822},[809,2607,1011],{"class":826},[809,2609,2610],{"class":811,"line":1014},[809,2611,891],{"emptyLinePlaceholder":890},[809,2613,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640],{"class":811,"line":1051},[809,2615,1658],{"class":826},[809,2617,985],{"class":822},[809,2619,1663],{"class":903},[809,2621,907],{"class":826},[809,2623,998],{"class":822},[809,2625,1670],{"class":839},[809,2627,998],{"class":822},[809,2629,1006],{"class":822},[809,2631,1037],{"class":822},[809,2633,920],{"class":919},[809,2635,959],{"class":826},[809,2637,985],{"class":822},[809,2639,1046],{"class":903},[809,2641,971],{"class":826},[799,2643,2645],{"className":801,"code":2644,"filename":290,"language":803,"meta":2103,"style":805},"import { evlog } from 'evlog\u002Felysia'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n\nprocess.on('SIGTERM', () => drain.flush())\n",[704,2646,2647,2666,2686,2704,2722,2726,2744,2760,2764,2786,2790],{"__ignoreMap":805},[809,2648,2649,2651,2653,2655,2657,2659,2661,2664],{"class":811,"line":812},[809,2650,816],{"class":815},[809,2652,823],{"class":822},[809,2654,1907],{"class":826},[809,2656,830],{"class":822},[809,2658,833],{"class":815},[809,2660,836],{"class":822},[809,2662,2663],{"class":839},"evlog\u002Felysia",[809,2665,843],{"class":822},[809,2667,2668,2670,2672,2674,2676,2678,2680,2682,2684],{"class":811,"line":846},[809,2669,816],{"class":815},[809,2671,819],{"class":815},[809,2673,823],{"class":822},[809,2675,827],{"class":826},[809,2677,830],{"class":822},[809,2679,833],{"class":815},[809,2681,836],{"class":822},[809,2683,840],{"class":839},[809,2685,843],{"class":822},[809,2687,2688,2690,2692,2694,2696,2698,2700,2702],{"class":811,"line":866},[809,2689,816],{"class":815},[809,2691,823],{"class":822},[809,2693,853],{"class":826},[809,2695,830],{"class":822},[809,2697,833],{"class":815},[809,2699,836],{"class":822},[809,2701,710],{"class":839},[809,2703,843],{"class":822},[809,2705,2706,2708,2710,2712,2714,2716,2718,2720],{"class":811,"line":887},[809,2707,816],{"class":815},[809,2709,823],{"class":822},[809,2711,873],{"class":826},[809,2713,830],{"class":822},[809,2715,833],{"class":815},[809,2717,836],{"class":822},[809,2719,882],{"class":839},[809,2721,843],{"class":822},[809,2723,2724],{"class":811,"line":894},[809,2725,891],{"emptyLinePlaceholder":890},[809,2727,2728,2730,2732,2734,2736,2738,2740,2742],{"class":811,"line":926},[809,2729,1357],{"class":919},[809,2731,1360],{"class":826},[809,2733,1363],{"class":822},[809,2735,853],{"class":903},[809,2737,940],{"class":822},[809,2739,944],{"class":943},[809,2741,947],{"class":822},[809,2743,951],{"class":826},[809,2745,2746,2748,2750,2752,2754,2756,2758],{"class":811,"line":954},[809,2747,1357],{"class":919},[809,2749,1380],{"class":826},[809,2751,1363],{"class":822},[809,2753,932],{"class":903},[809,2755,907],{"class":826},[809,2757,968],{"class":903},[809,2759,971],{"class":826},[809,2761,2762],{"class":811,"line":974},[809,2763,891],{"emptyLinePlaceholder":890},[809,2765,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784],{"class":811,"line":979},[809,2767,2227],{"class":826},[809,2769,985],{"class":822},[809,2771,2232],{"class":903},[809,2773,907],{"class":826},[809,2775,840],{"class":903},[809,2777,907],{"class":826},[809,2779,1643],{"class":822},[809,2781,1380],{"class":826},[809,2783,1054],{"class":822},[809,2785,2247],{"class":826},[809,2787,2788],{"class":811,"line":1014},[809,2789,891],{"emptyLinePlaceholder":890},[809,2791,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818],{"class":811,"line":1051},[809,2793,1658],{"class":826},[809,2795,985],{"class":822},[809,2797,1663],{"class":903},[809,2799,907],{"class":826},[809,2801,998],{"class":822},[809,2803,1670],{"class":839},[809,2805,998],{"class":822},[809,2807,1006],{"class":822},[809,2809,1037],{"class":822},[809,2811,920],{"class":919},[809,2813,959],{"class":826},[809,2815,985],{"class":822},[809,2817,1046],{"class":903},[809,2819,971],{"class":826},[799,2821,2824],{"className":801,"code":2822,"filename":270,"language":803,"meta":2823,"style":805},"import { EvlogModule } from 'evlog\u002Fnestjs'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nEvlogModule.forRoot({ drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","src\u002Fapp.module.ts",[704,2825,2826,2846,2866,2884,2902,2906,2924,2940,2944,2964,2968],{"__ignoreMap":805},[809,2827,2828,2830,2832,2835,2837,2839,2841,2844],{"class":811,"line":812},[809,2829,816],{"class":815},[809,2831,823],{"class":822},[809,2833,2834],{"class":826}," EvlogModule",[809,2836,830],{"class":822},[809,2838,833],{"class":815},[809,2840,836],{"class":822},[809,2842,2843],{"class":839},"evlog\u002Fnestjs",[809,2845,843],{"class":822},[809,2847,2848,2850,2852,2854,2856,2858,2860,2862,2864],{"class":811,"line":846},[809,2849,816],{"class":815},[809,2851,819],{"class":815},[809,2853,823],{"class":822},[809,2855,827],{"class":826},[809,2857,830],{"class":822},[809,2859,833],{"class":815},[809,2861,836],{"class":822},[809,2863,840],{"class":839},[809,2865,843],{"class":822},[809,2867,2868,2870,2872,2874,2876,2878,2880,2882],{"class":811,"line":866},[809,2869,816],{"class":815},[809,2871,823],{"class":822},[809,2873,853],{"class":826},[809,2875,830],{"class":822},[809,2877,833],{"class":815},[809,2879,836],{"class":822},[809,2881,710],{"class":839},[809,2883,843],{"class":822},[809,2885,2886,2888,2890,2892,2894,2896,2898,2900],{"class":811,"line":887},[809,2887,816],{"class":815},[809,2889,823],{"class":822},[809,2891,873],{"class":826},[809,2893,830],{"class":822},[809,2895,833],{"class":815},[809,2897,836],{"class":822},[809,2899,882],{"class":839},[809,2901,843],{"class":822},[809,2903,2904],{"class":811,"line":894},[809,2905,891],{"emptyLinePlaceholder":890},[809,2907,2908,2910,2912,2914,2916,2918,2920,2922],{"class":811,"line":926},[809,2909,1357],{"class":919},[809,2911,1360],{"class":826},[809,2913,1363],{"class":822},[809,2915,853],{"class":903},[809,2917,940],{"class":822},[809,2919,944],{"class":943},[809,2921,947],{"class":822},[809,2923,951],{"class":826},[809,2925,2926,2928,2930,2932,2934,2936,2938],{"class":811,"line":954},[809,2927,1357],{"class":919},[809,2929,1380],{"class":826},[809,2931,1363],{"class":822},[809,2933,932],{"class":903},[809,2935,907],{"class":826},[809,2937,968],{"class":903},[809,2939,971],{"class":826},[809,2941,2942],{"class":811,"line":974},[809,2943,891],{"emptyLinePlaceholder":890},[809,2945,2946,2949,2951,2954,2956,2958,2960,2962],{"class":811,"line":979},[809,2947,2948],{"class":826},"EvlogModule",[809,2950,985],{"class":822},[809,2952,2953],{"class":903},"forRoot",[809,2955,907],{"class":826},[809,2957,1643],{"class":822},[809,2959,1380],{"class":826},[809,2961,1054],{"class":822},[809,2963,1011],{"class":826},[809,2965,2966],{"class":811,"line":1014},[809,2967,891],{"emptyLinePlaceholder":890},[809,2969,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996],{"class":811,"line":1051},[809,2971,1658],{"class":826},[809,2973,985],{"class":822},[809,2975,1663],{"class":903},[809,2977,907],{"class":826},[809,2979,998],{"class":822},[809,2981,1670],{"class":839},[809,2983,998],{"class":822},[809,2985,1006],{"class":822},[809,2987,1037],{"class":822},[809,2989,920],{"class":919},[809,2991,959],{"class":826},[809,2993,985],{"class":822},[809,2995,1046],{"class":903},[809,2997,971],{"class":826},[799,2999,3002],{"className":801,"code":3000,"filename":314,"language":803,"meta":3001,"style":805},"import { withEvlog } from 'evlog\u002Forpc'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nconst handler = withEvlog(new RPCHandler(router), { drain })\n\nprocess.on('SIGTERM', () => drain.flush())\n","server\u002Forpc.ts",[704,3003,3004,3023,3043,3061,3079,3083,3101,3117,3121,3153,3157],{"__ignoreMap":805},[809,3005,3006,3008,3010,3012,3014,3016,3018,3021],{"class":811,"line":812},[809,3007,816],{"class":815},[809,3009,823],{"class":822},[809,3011,1406],{"class":826},[809,3013,830],{"class":822},[809,3015,833],{"class":815},[809,3017,836],{"class":822},[809,3019,3020],{"class":839},"evlog\u002Forpc",[809,3022,843],{"class":822},[809,3024,3025,3027,3029,3031,3033,3035,3037,3039,3041],{"class":811,"line":846},[809,3026,816],{"class":815},[809,3028,819],{"class":815},[809,3030,823],{"class":822},[809,3032,827],{"class":826},[809,3034,830],{"class":822},[809,3036,833],{"class":815},[809,3038,836],{"class":822},[809,3040,840],{"class":839},[809,3042,843],{"class":822},[809,3044,3045,3047,3049,3051,3053,3055,3057,3059],{"class":811,"line":866},[809,3046,816],{"class":815},[809,3048,823],{"class":822},[809,3050,853],{"class":826},[809,3052,830],{"class":822},[809,3054,833],{"class":815},[809,3056,836],{"class":822},[809,3058,710],{"class":839},[809,3060,843],{"class":822},[809,3062,3063,3065,3067,3069,3071,3073,3075,3077],{"class":811,"line":887},[809,3064,816],{"class":815},[809,3066,823],{"class":822},[809,3068,873],{"class":826},[809,3070,830],{"class":822},[809,3072,833],{"class":815},[809,3074,836],{"class":822},[809,3076,882],{"class":839},[809,3078,843],{"class":822},[809,3080,3081],{"class":811,"line":894},[809,3082,891],{"emptyLinePlaceholder":890},[809,3084,3085,3087,3089,3091,3093,3095,3097,3099],{"class":811,"line":926},[809,3086,1357],{"class":919},[809,3088,1360],{"class":826},[809,3090,1363],{"class":822},[809,3092,853],{"class":903},[809,3094,940],{"class":822},[809,3096,944],{"class":943},[809,3098,947],{"class":822},[809,3100,951],{"class":826},[809,3102,3103,3105,3107,3109,3111,3113,3115],{"class":811,"line":954},[809,3104,1357],{"class":919},[809,3106,1380],{"class":826},[809,3108,1363],{"class":822},[809,3110,932],{"class":903},[809,3112,907],{"class":826},[809,3114,968],{"class":903},[809,3116,971],{"class":826},[809,3118,3119],{"class":811,"line":974},[809,3120,891],{"emptyLinePlaceholder":890},[809,3122,3123,3125,3128,3130,3132,3134,3137,3140,3143,3145,3147,3149,3151],{"class":811,"line":979},[809,3124,1357],{"class":919},[809,3126,3127],{"class":826}," handler ",[809,3129,1363],{"class":822},[809,3131,1406],{"class":903},[809,3133,907],{"class":826},[809,3135,3136],{"class":822},"new",[809,3138,3139],{"class":903}," RPCHandler",[809,3141,3142],{"class":826},"(router)",[809,3144,1006],{"class":822},[809,3146,823],{"class":822},[809,3148,1380],{"class":826},[809,3150,1054],{"class":822},[809,3152,1011],{"class":826},[809,3154,3155],{"class":811,"line":1014},[809,3156,891],{"emptyLinePlaceholder":890},[809,3158,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185],{"class":811,"line":1051},[809,3160,1658],{"class":826},[809,3162,985],{"class":822},[809,3164,1663],{"class":903},[809,3166,907],{"class":826},[809,3168,998],{"class":822},[809,3170,1670],{"class":839},[809,3172,998],{"class":822},[809,3174,1006],{"class":822},[809,3176,1037],{"class":822},[809,3178,920],{"class":919},[809,3180,959],{"class":826},[809,3182,985],{"class":822},[809,3184,1046],{"class":903},[809,3186,971],{"class":826},[799,3188,3191],{"className":801,"code":3189,"filename":300,"language":803,"meta":3190,"style":805},"import { withEvlog } from 'evlog\u002Fworkers'\nimport type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\nexport default withEvlog(handler, { drain })\n","src\u002Fworker.ts",[704,3192,3193,3212,3232,3250,3268,3272,3290,3306,3310],{"__ignoreMap":805},[809,3194,3195,3197,3199,3201,3203,3205,3207,3210],{"class":811,"line":812},[809,3196,816],{"class":815},[809,3198,823],{"class":822},[809,3200,1406],{"class":826},[809,3202,830],{"class":822},[809,3204,833],{"class":815},[809,3206,836],{"class":822},[809,3208,3209],{"class":839},"evlog\u002Fworkers",[809,3211,843],{"class":822},[809,3213,3214,3216,3218,3220,3222,3224,3226,3228,3230],{"class":811,"line":846},[809,3215,816],{"class":815},[809,3217,819],{"class":815},[809,3219,823],{"class":822},[809,3221,827],{"class":826},[809,3223,830],{"class":822},[809,3225,833],{"class":815},[809,3227,836],{"class":822},[809,3229,840],{"class":839},[809,3231,843],{"class":822},[809,3233,3234,3236,3238,3240,3242,3244,3246,3248],{"class":811,"line":866},[809,3235,816],{"class":815},[809,3237,823],{"class":822},[809,3239,853],{"class":826},[809,3241,830],{"class":822},[809,3243,833],{"class":815},[809,3245,836],{"class":822},[809,3247,710],{"class":839},[809,3249,843],{"class":822},[809,3251,3252,3254,3256,3258,3260,3262,3264,3266],{"class":811,"line":887},[809,3253,816],{"class":815},[809,3255,823],{"class":822},[809,3257,873],{"class":826},[809,3259,830],{"class":822},[809,3261,833],{"class":815},[809,3263,836],{"class":822},[809,3265,882],{"class":839},[809,3267,843],{"class":822},[809,3269,3270],{"class":811,"line":894},[809,3271,891],{"emptyLinePlaceholder":890},[809,3273,3274,3276,3278,3280,3282,3284,3286,3288],{"class":811,"line":926},[809,3275,1357],{"class":919},[809,3277,1360],{"class":826},[809,3279,1363],{"class":822},[809,3281,853],{"class":903},[809,3283,940],{"class":822},[809,3285,944],{"class":943},[809,3287,947],{"class":822},[809,3289,951],{"class":826},[809,3291,3292,3294,3296,3298,3300,3302,3304],{"class":811,"line":954},[809,3293,1357],{"class":919},[809,3295,1380],{"class":826},[809,3297,1363],{"class":822},[809,3299,932],{"class":903},[809,3301,907],{"class":826},[809,3303,968],{"class":903},[809,3305,971],{"class":826},[809,3307,3308],{"class":811,"line":974},[809,3309,891],{"emptyLinePlaceholder":890},[809,3311,3312,3314,3316,3318,3321,3323,3325,3327,3329],{"class":811,"line":979},[809,3313,897],{"class":815},[809,3315,900],{"class":815},[809,3317,1406],{"class":903},[809,3319,3320],{"class":826},"(handler",[809,3322,1006],{"class":822},[809,3324,823],{"class":822},[809,3326,1380],{"class":826},[809,3328,1054],{"class":822},[809,3330,1011],{"class":826},[799,3332,3335],{"className":801,"code":3333,"filename":305,"language":803,"meta":3334,"style":805},"\u002F\u002F Plain TypeScript \u002F Bun \u002F Node script\nimport type { DrainContext } from 'evlog'\nimport { initLogger } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({ drain })\n\nawait drain.flush() \u002F\u002F before exit\n","index.ts",[704,3336,3337,3343,3363,3382,3400,3418,3422,3440,3456,3460,3475,3479],{"__ignoreMap":805},[809,3338,3339],{"class":811,"line":812},[809,3340,3342],{"class":3341},"sHwdD","\u002F\u002F Plain TypeScript \u002F Bun \u002F Node script\n",[809,3344,3345,3347,3349,3351,3353,3355,3357,3359,3361],{"class":811,"line":846},[809,3346,816],{"class":815},[809,3348,819],{"class":815},[809,3350,823],{"class":822},[809,3352,827],{"class":826},[809,3354,830],{"class":822},[809,3356,833],{"class":815},[809,3358,836],{"class":822},[809,3360,840],{"class":839},[809,3362,843],{"class":822},[809,3364,3365,3367,3369,3372,3374,3376,3378,3380],{"class":811,"line":866},[809,3366,816],{"class":815},[809,3368,823],{"class":822},[809,3370,3371],{"class":826}," initLogger",[809,3373,830],{"class":822},[809,3375,833],{"class":815},[809,3377,836],{"class":822},[809,3379,840],{"class":839},[809,3381,843],{"class":822},[809,3383,3384,3386,3388,3390,3392,3394,3396,3398],{"class":811,"line":887},[809,3385,816],{"class":815},[809,3387,823],{"class":822},[809,3389,853],{"class":826},[809,3391,830],{"class":822},[809,3393,833],{"class":815},[809,3395,836],{"class":822},[809,3397,710],{"class":839},[809,3399,843],{"class":822},[809,3401,3402,3404,3406,3408,3410,3412,3414,3416],{"class":811,"line":894},[809,3403,816],{"class":815},[809,3405,823],{"class":822},[809,3407,873],{"class":826},[809,3409,830],{"class":822},[809,3411,833],{"class":815},[809,3413,836],{"class":822},[809,3415,882],{"class":839},[809,3417,843],{"class":822},[809,3419,3420],{"class":811,"line":926},[809,3421,891],{"emptyLinePlaceholder":890},[809,3423,3424,3426,3428,3430,3432,3434,3436,3438],{"class":811,"line":954},[809,3425,1357],{"class":919},[809,3427,1360],{"class":826},[809,3429,1363],{"class":822},[809,3431,853],{"class":903},[809,3433,940],{"class":822},[809,3435,944],{"class":943},[809,3437,947],{"class":822},[809,3439,951],{"class":826},[809,3441,3442,3444,3446,3448,3450,3452,3454],{"class":811,"line":974},[809,3443,1357],{"class":919},[809,3445,1380],{"class":826},[809,3447,1363],{"class":822},[809,3449,932],{"class":903},[809,3451,907],{"class":826},[809,3453,968],{"class":903},[809,3455,971],{"class":826},[809,3457,3458],{"class":811,"line":979},[809,3459,891],{"emptyLinePlaceholder":890},[809,3461,3462,3465,3467,3469,3471,3473],{"class":811,"line":1014},[809,3463,3464],{"class":903},"initLogger",[809,3466,907],{"class":826},[809,3468,1643],{"class":822},[809,3470,1380],{"class":826},[809,3472,1054],{"class":822},[809,3474,1011],{"class":826},[809,3476,3477],{"class":811,"line":1051},[809,3478,891],{"emptyLinePlaceholder":890},[809,3480,3481,3483,3485,3487,3489,3492],{"class":811,"line":1262},[809,3482,2586],{"class":815},[809,3484,959],{"class":826},[809,3486,985],{"class":822},[809,3488,1046],{"class":903},[809,3490,3491],{"class":826},"() ",[809,3493,3494],{"class":3341},"\u002F\u002F before exit\n",[3496,3497,3500,3501,3503,3504,3506,3507,3509,3510,985],"callout",{"color":3498,"icon":3499},"warning","i-lucide-alert-triangle","Always flush the pipeline before the process exits (",[704,3502,751],{},"). On Nitro use the ",[704,3505,755],{}," hook; on standalone scripts call it before ",[704,3508,759],{},". On serverless runtimes the middleware extends the instance's lifetime for you, see ",[618,3511,3513],{"href":3512},"#serverless","Serverless",[789,3515,3517],{"id":3516},"what-the-pipeline-does-to-an-event","What the pipeline does to an event",[614,3519,3520,3521,3523,3524,3527,3528,3531,3532,3535,3536,3539,3540,3542],{},"Events are buffered as they arrive on ",[704,3522,1001],{},". A batch flushes when either ",[704,3525,3526],{},"batch.size"," is reached or ",[704,3529,3530],{},"batch.intervalMs"," expires (whichever comes first). On failure, the same batch is retried with the configured backoff; once ",[704,3533,3534],{},"retry.maxAttempts"," is exhausted, ",[704,3537,3538],{},"onDropped"," is called with the lost events (or the drop is logged when you didn't configure one). The buffer is bounded by ",[704,3541,730],{},". Once full, the oldest events are dropped to keep memory flat.",[3544,3545,3547],"h3",{"id":3546},"the-pipeline-owns-retries","The pipeline owns retries",[614,3549,3550,3551,3554,3555,3558,3559,3561,3562,3564,3565,3568,3569,3572],{},"Adapter drains (",[704,3552,3553],{},"createAxiomDrain()",", ",[704,3556,3557],{},"createDatadogDrain()",", …) swallow delivery failures when called directly, so a failing backend never breaks a request. Inside the pipeline that would make ",[704,3560,726],{}," and ",[704,3563,3538],{}," dead code, so the pipeline unwraps the adapter to its throwing ",[704,3566,3567],{},"raw"," variant: failures reach the retry loop, and raw delivery defaults to a single HTTP attempt so the batch isn't retried twice. Set ",[704,3570,3571],{},"retries"," on the adapter config only if you explicitly want extra HTTP attempts inside each pipeline attempt.",[789,3574,552],{"id":3575},"configuration",[799,3577,3580],{"className":801,"code":3578,"filename":3579,"language":803,"meta":805,"style":805},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: {\n    size: 50,          \u002F\u002F Flush every 50 events\n    intervalMs: 5000,  \u002F\u002F Or every 5 seconds, whichever comes first\n  },\n  retry: {\n    maxAttempts: 3,\n    backoff: 'exponential',\n    initialDelayMs: 1000,\n    maxDelayMs: 30000,\n  },\n  maxBufferSize: 1000,\n  onDropped: (events, error) => {\n    console.error(`[evlog] Dropped ${events.length} events:`, error?.message)\n  },\n})\n\nexport const drain = pipeline(createAxiomDrain())\n","pipeline-config.ts",[704,3581,3582,3602,3620,3638,3642,3662,3671,3687,3702,3707,3716,3728,3744,3756,3768,3773,3785,3810,3858,3863,3870,3875],{"__ignoreMap":805},[809,3583,3584,3586,3588,3590,3592,3594,3596,3598,3600],{"class":811,"line":812},[809,3585,816],{"class":815},[809,3587,819],{"class":815},[809,3589,823],{"class":822},[809,3591,827],{"class":826},[809,3593,830],{"class":822},[809,3595,833],{"class":815},[809,3597,836],{"class":822},[809,3599,840],{"class":839},[809,3601,843],{"class":822},[809,3603,3604,3606,3608,3610,3612,3614,3616,3618],{"class":811,"line":846},[809,3605,816],{"class":815},[809,3607,823],{"class":822},[809,3609,853],{"class":826},[809,3611,830],{"class":822},[809,3613,833],{"class":815},[809,3615,836],{"class":822},[809,3617,710],{"class":839},[809,3619,843],{"class":822},[809,3621,3622,3624,3626,3628,3630,3632,3634,3636],{"class":811,"line":866},[809,3623,816],{"class":815},[809,3625,823],{"class":822},[809,3627,873],{"class":826},[809,3629,830],{"class":822},[809,3631,833],{"class":815},[809,3633,836],{"class":822},[809,3635,882],{"class":839},[809,3637,843],{"class":822},[809,3639,3640],{"class":811,"line":887},[809,3641,891],{"emptyLinePlaceholder":890},[809,3643,3644,3646,3648,3650,3652,3654,3656,3658,3660],{"class":811,"line":894},[809,3645,1357],{"class":919},[809,3647,1360],{"class":826},[809,3649,1363],{"class":822},[809,3651,853],{"class":903},[809,3653,940],{"class":822},[809,3655,944],{"class":943},[809,3657,947],{"class":822},[809,3659,907],{"class":826},[809,3661,1432],{"class":822},[809,3663,3664,3667,3669],{"class":811,"line":926},[809,3665,3666],{"class":950},"  batch",[809,3668,1440],{"class":822},[809,3670,923],{"class":822},[809,3672,3673,3676,3678,3682,3684],{"class":811,"line":954},[809,3674,3675],{"class":950},"    size",[809,3677,1440],{"class":822},[809,3679,3681],{"class":3680},"sbssI"," 50",[809,3683,1006],{"class":822},[809,3685,3686],{"class":3341},"          \u002F\u002F Flush every 50 events\n",[809,3688,3689,3692,3694,3697,3699],{"class":811,"line":974},[809,3690,3691],{"class":950},"    intervalMs",[809,3693,1440],{"class":822},[809,3695,3696],{"class":3680}," 5000",[809,3698,1006],{"class":822},[809,3700,3701],{"class":3341},"  \u002F\u002F Or every 5 seconds, whichever comes first\n",[809,3703,3704],{"class":811,"line":979},[809,3705,3706],{"class":822},"  },\n",[809,3708,3709,3712,3714],{"class":811,"line":1014},[809,3710,3711],{"class":950},"  retry",[809,3713,1440],{"class":822},[809,3715,923],{"class":822},[809,3717,3718,3721,3723,3726],{"class":811,"line":1051},[809,3719,3720],{"class":950},"    maxAttempts",[809,3722,1440],{"class":822},[809,3724,3725],{"class":3680}," 3",[809,3727,1450],{"class":822},[809,3729,3730,3733,3735,3737,3740,3742],{"class":811,"line":1262},[809,3731,3732],{"class":950},"    backoff",[809,3734,1440],{"class":822},[809,3736,836],{"class":822},[809,3738,3739],{"class":839},"exponential",[809,3741,998],{"class":822},[809,3743,1450],{"class":822},[809,3745,3746,3749,3751,3754],{"class":811,"line":1466},[809,3747,3748],{"class":950},"    initialDelayMs",[809,3750,1440],{"class":822},[809,3752,3753],{"class":3680}," 1000",[809,3755,1450],{"class":822},[809,3757,3758,3761,3763,3766],{"class":811,"line":1471},[809,3759,3760],{"class":950},"    maxDelayMs",[809,3762,1440],{"class":822},[809,3764,3765],{"class":3680}," 30000",[809,3767,1450],{"class":822},[809,3769,3771],{"class":811,"line":3770},15,[809,3772,3706],{"class":822},[809,3774,3776,3779,3781,3783],{"class":811,"line":3775},16,[809,3777,3778],{"class":950},"  maxBufferSize",[809,3780,1440],{"class":822},[809,3782,3753],{"class":3680},[809,3784,1450],{"class":822},[809,3786,3788,3791,3793,3796,3799,3801,3804,3806,3808],{"class":811,"line":3787},17,[809,3789,3790],{"class":903},"  onDropped",[809,3792,1440],{"class":822},[809,3794,3795],{"class":822}," (",[809,3797,3798],{"class":912},"events",[809,3800,1006],{"class":822},[809,3802,3803],{"class":912}," error",[809,3805,916],{"class":822},[809,3807,920],{"class":919},[809,3809,923],{"class":822},[809,3811,3813,3816,3818,3821,3823,3826,3829,3832,3834,3836,3839,3841,3844,3846,3848,3850,3853,3856],{"class":811,"line":3812},18,[809,3814,3815],{"class":826},"    console",[809,3817,985],{"class":822},[809,3819,3820],{"class":903},"error",[809,3822,907],{"class":950},[809,3824,3825],{"class":822},"`",[809,3827,3828],{"class":839},"[evlog] Dropped ",[809,3830,3831],{"class":822},"${",[809,3833,3798],{"class":826},[809,3835,985],{"class":822},[809,3837,3838],{"class":826},"length",[809,3840,1054],{"class":822},[809,3842,3843],{"class":839}," events:",[809,3845,3825],{"class":822},[809,3847,1006],{"class":822},[809,3849,3803],{"class":826},[809,3851,3852],{"class":822},"?.",[809,3854,3855],{"class":826},"message",[809,3857,1011],{"class":950},[809,3859,3861],{"class":811,"line":3860},19,[809,3862,3706],{"class":822},[809,3864,3866,3868],{"class":811,"line":3865},20,[809,3867,1054],{"class":822},[809,3869,1011],{"class":826},[809,3871,3873],{"class":811,"line":3872},21,[809,3874,891],{"emptyLinePlaceholder":890},[809,3876,3878,3880,3882,3884,3886,3888,3890,3892],{"class":811,"line":3877},22,[809,3879,897],{"class":815},[809,3881,1401],{"class":919},[809,3883,1380],{"class":826},[809,3885,1363],{"class":822},[809,3887,932],{"class":903},[809,3889,907],{"class":826},[809,3891,968],{"class":903},[809,3893,971],{"class":826},[3544,3895,3897],{"id":3896},"every-option-and-its-default","Every option, and its default",[627,3899,3900,3913],{},[630,3901,3902],{},[633,3903,3904,3907,3910],{},[636,3905,3906],{},"Option",[636,3908,3909],{},"Default",[636,3911,3912],{},"Description",[643,3914,3915,3929,3943,3957,3980,3995,4010,4023],{},[633,3916,3917,3921,3926],{},[648,3918,3919],{},[704,3920,3526],{},[648,3922,3923],{},[704,3924,3925],{},"50",[648,3927,3928],{},"Maximum events per batch",[633,3930,3931,3935,3940],{},[648,3932,3933],{},[704,3934,3530],{},[648,3936,3937],{},[704,3938,3939],{},"5000",[648,3941,3942],{},"Max time (ms) before flushing a partial batch",[633,3944,3945,3949,3954],{},[648,3946,3947],{},[704,3948,3534],{},[648,3950,3951],{},[704,3952,3953],{},"3",[648,3955,3956],{},"Total attempts including the initial one",[633,3958,3959,3964,3969],{},[648,3960,3961],{},[704,3962,3963],{},"retry.backoff",[648,3965,3966],{},[704,3967,3968],{},"'exponential'",[648,3970,3971,3973,3974,3973,3977],{},[704,3972,3968],{}," | ",[704,3975,3976],{},"'linear'",[704,3978,3979],{},"'fixed'",[633,3981,3982,3987,3992],{},[648,3983,3984],{},[704,3985,3986],{},"retry.initialDelayMs",[648,3988,3989],{},[704,3990,3991],{},"1000",[648,3993,3994],{},"Base delay for the first retry",[633,3996,3997,4002,4007],{},[648,3998,3999],{},[704,4000,4001],{},"retry.maxDelayMs",[648,4003,4004],{},[704,4005,4006],{},"30000",[648,4008,4009],{},"Upper bound for any retry delay",[633,4011,4012,4016,4020],{},[648,4013,4014],{},[704,4015,730],{},[648,4017,4018],{},[704,4019,3991],{},[648,4021,4022],{},"Max buffered events before dropping oldest",[633,4024,4025,4029,4032],{},[648,4026,4027],{},[704,4028,3538],{},[648,4030,4031],{},"-",[648,4033,4034],{},"Callback when events are dropped (overflow or retry exhaustion)",[3544,4036,4038],{"id":4037},"choose-how-retries-space-out","Choose how retries space out",[627,4040,4041,4054],{},[630,4042,4043],{},[633,4044,4045,4048,4051],{},[636,4046,4047],{},"Strategy",[636,4049,4050],{},"Delay pattern",[636,4052,4053],{},"Use case",[643,4055,4056,4068,4081],{},[633,4057,4058,4062,4065],{},[648,4059,4060],{},[704,4061,3739],{},[648,4063,4064],{},"1s, 2s, 4s, 8s…",[648,4066,4067],{},"Default. Best for transient failures that may need time to recover",[633,4069,4070,4075,4078],{},[648,4071,4072],{},[704,4073,4074],{},"linear",[648,4076,4077],{},"1s, 2s, 3s, 4s…",[648,4079,4080],{},"Predictable delay growth",[633,4082,4083,4088,4091],{},[648,4084,4085],{},[704,4086,4087],{},"fixed",[648,4089,4090],{},"1s, 1s, 1s, 1s…",[648,4092,4093],{},"Same delay every time. Useful for rate-limited APIs",[3544,4095,4097],{"id":4096},"what-the-wrapper-hands-back","What the wrapper hands back",[614,4099,4100,4101,4104],{},"The function returned by ",[704,4102,4103],{},"pipeline(drain)"," is hook-compatible and exposes:",[627,4106,4107,4119],{},[630,4108,4109],{},[633,4110,4111,4114,4117],{},[636,4112,4113],{},"Property",[636,4115,4116],{},"Type",[636,4118,3912],{},[643,4120,4121,4136,4150,4163],{},[633,4122,4123,4128,4133],{},[648,4124,4125],{},[704,4126,4127],{},"drain(ctx)",[648,4129,4130],{},[704,4131,4132],{},"(ctx: T) => void",[648,4134,4135],{},"Push a single event into the buffer",[633,4137,4138,4142,4147],{},[648,4139,4140],{},[704,4141,751],{},[648,4143,4144],{},[704,4145,4146],{},"() => Promise\u003Cvoid>",[648,4148,4149],{},"Force-flush all buffered events",[633,4151,4152,4156,4160],{},[648,4153,4154],{},[704,4155,767],{},[648,4157,4158],{},[704,4159,4146],{},[648,4161,4162],{},"Resolves once everything buffered so far is delivered or dropped, without forcing a flush",[633,4164,4165,4170,4175],{},[648,4166,4167],{},[704,4168,4169],{},"drain.pending",[648,4171,4172],{},[704,4173,4174],{},"number",[648,4176,4177],{},"Number of events currently buffered",[789,4179,3513],{"id":4180},"serverless",[614,4182,4183,4185,4186,4188,4189,768,4191,4193,4194,4197,4198,4201,4202,4204,4205,4207,4208,4211],{},[704,4184,4127],{}," returns after buffering, so on a serverless runtime the interesting question is what keeps the instance alive until the batch actually ships. When you pass the pipeline as the ",[704,4187,763],{}," option of a framework integration, the middleware registers ",[704,4190,767],{},[704,4192,771],{}," (Next's ",[704,4195,4196],{},"after()",", Workers' ",[704,4199,4200],{},"ctx.waitUntil","): the instance stays alive until the buffered batch is delivered or dropped. ",[704,4203,3530],{}," bounds when the first delivery attempt starts; retry backoff can extend the lifetime past it until delivery succeeds or ",[704,4206,3534],{}," is exhausted. Lower ",[704,4209,4210],{},"intervalMs"," on serverless if you'd rather trade batching for shorter post-response lifetimes.",[614,4213,4214,4215,4217,4218,4220,4221,4223,4224,4226],{},"Nitro is the exception: drains registered on the ",[704,4216,1001],{}," hook are opaque to the plugin, so it can't extend the lifetime for you. On Node the ",[704,4219,755],{}," hook flush from the quick start covers shutdown; on Cloudflare register ",[704,4222,767],{}," with the execution context's ",[704,4225,771],{}," yourself where you handle the request.",[789,4228,667],{"id":4229},"fanout",[4231,4232],"drain-fan-out",{},[614,4234,4235,4236,4239],{},"In production, the same wide event often needs to reach more than one destination: a long-term store (Axiom), a metrics tool (Datadog), an error tracker (Sentry), and a local fs drain for incident replay. The pipeline batches once, then your drain fans out the batch to every destination in parallel via ",[704,4237,4238],{},"Promise.allSettled"," so a single slow \u002F failing destination cannot block the others.",[689,4241,4243,4246,4304],{":actions":691,"description":4242,"icon":537},"Fan out evlog events to multiple destinations",[614,4244,4245],{},"Send each wide event to several destinations in parallel through a single drain pipeline.",[697,4247,4248,4264,4274,4287,4298],{},[700,4249,4250,4251,707,4253,4255,4256,4259,4260,4263],{},"Wrap a single ",[704,4252,706],{},[704,4254,710],{}," around a fan-out function that calls every destination drain inside ",[704,4257,4258],{},"Promise.allSettled([drainA(batch), drainB(batch), …])",". Use ",[704,4261,4262],{},"allSettled"," so one failing drain doesn't reject the whole batch",[700,4265,4266,4267,4270,4271,916],{},"Pick destinations by purpose: long-term store (Axiom \u002F Better Stack \u002F Datadog), error tracker (Sentry, typically ",[704,4268,4269],{},"{ minLevel: 'error' }"," so it doesn't get all events), local replay (",[704,4272,4273],{},"createFsDrain",[700,4275,4276,4277,3554,4279,3554,4281,4283,4284,4286],{},"Tune ",[704,4278,3526],{},[704,4280,3530],{},[704,4282,3534],{},", and ",[704,4285,730],{}," once at the pipeline level, which applies to all destinations",[700,4288,4289,4290,4293,4294,4297],{},"For destinations that need different filtering, prefer per-drain ",[704,4291,4292],{},"minLevel"," \u002F ",[704,4295,4296],{},"filter"," options over wrapping",[700,4299,4300,4301,4303],{},"Don't forget ",[704,4302,751],{}," on shutdown. Events buffered for fanout are lost on abrupt exit",[614,4305,777,4306],{},[618,4307,780],{"href":780,"rel":4308},[782],[3544,4310,4312],{"id":4311},"wire-the-fan-out","Wire the fan-out",[799,4314,4318],{"className":4315,"code":4316,"language":4317,"meta":805,"style":805},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDatadogDrain } from 'evlog\u002Fdatadog'\nimport { createSentryDrain } from 'evlog\u002Fsentry'\nimport { createFsDrain } from 'evlog\u002Ffs'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n  maxBufferSize: 1000,\n})\n\nconst axiom = createAxiomDrain()\nconst datadog = createDatadogDrain()\nconst sentry = createSentryDrain({ minLevel: 'error' })\nconst fs = createFsDrain({ dir: '.evlog\u002Flogs', maxFiles: 14 })\n\nexport const drain = pipeline(async (batch) => {\n  await Promise.allSettled([\n    axiom(batch),\n    datadog(batch),\n    sentry(batch),\n    fs(batch),\n  ])\n})\n","ts",[704,4319,4320,4338,4356,4376,4396,4416,4436,4440,4460,4487,4504,4514,4520,4524,4537,4550,4580,4621,4625,4652,4667,4680,4693,4707,4721,4727],{"__ignoreMap":805},[809,4321,4322,4324,4326,4328,4330,4332,4334,4336],{"class":811,"line":812},[809,4323,816],{"class":815},[809,4325,823],{"class":822},[809,4327,853],{"class":826},[809,4329,830],{"class":822},[809,4331,833],{"class":815},[809,4333,836],{"class":822},[809,4335,710],{"class":839},[809,4337,843],{"class":822},[809,4339,4340,4342,4344,4346,4348,4350,4352,4354],{"class":811,"line":846},[809,4341,816],{"class":815},[809,4343,823],{"class":822},[809,4345,873],{"class":826},[809,4347,830],{"class":822},[809,4349,833],{"class":815},[809,4351,836],{"class":822},[809,4353,882],{"class":839},[809,4355,843],{"class":822},[809,4357,4358,4360,4362,4365,4367,4369,4371,4374],{"class":811,"line":866},[809,4359,816],{"class":815},[809,4361,823],{"class":822},[809,4363,4364],{"class":826}," createDatadogDrain",[809,4366,830],{"class":822},[809,4368,833],{"class":815},[809,4370,836],{"class":822},[809,4372,4373],{"class":839},"evlog\u002Fdatadog",[809,4375,843],{"class":822},[809,4377,4378,4380,4382,4385,4387,4389,4391,4394],{"class":811,"line":887},[809,4379,816],{"class":815},[809,4381,823],{"class":822},[809,4383,4384],{"class":826}," createSentryDrain",[809,4386,830],{"class":822},[809,4388,833],{"class":815},[809,4390,836],{"class":822},[809,4392,4393],{"class":839},"evlog\u002Fsentry",[809,4395,843],{"class":822},[809,4397,4398,4400,4402,4405,4407,4409,4411,4414],{"class":811,"line":894},[809,4399,816],{"class":815},[809,4401,823],{"class":822},[809,4403,4404],{"class":826}," createFsDrain",[809,4406,830],{"class":822},[809,4408,833],{"class":815},[809,4410,836],{"class":822},[809,4412,4413],{"class":839},"evlog\u002Ffs",[809,4415,843],{"class":822},[809,4417,4418,4420,4422,4424,4426,4428,4430,4432,4434],{"class":811,"line":926},[809,4419,816],{"class":815},[809,4421,819],{"class":815},[809,4423,823],{"class":822},[809,4425,827],{"class":826},[809,4427,830],{"class":822},[809,4429,833],{"class":815},[809,4431,836],{"class":822},[809,4433,840],{"class":839},[809,4435,843],{"class":822},[809,4437,4438],{"class":811,"line":954},[809,4439,891],{"emptyLinePlaceholder":890},[809,4441,4442,4444,4446,4448,4450,4452,4454,4456,4458],{"class":811,"line":974},[809,4443,1357],{"class":919},[809,4445,1360],{"class":826},[809,4447,1363],{"class":822},[809,4449,853],{"class":903},[809,4451,940],{"class":822},[809,4453,944],{"class":943},[809,4455,947],{"class":822},[809,4457,907],{"class":826},[809,4459,1432],{"class":822},[809,4461,4462,4464,4466,4468,4471,4473,4475,4477,4480,4482,4484],{"class":811,"line":979},[809,4463,3666],{"class":950},[809,4465,1440],{"class":822},[809,4467,823],{"class":822},[809,4469,4470],{"class":950}," size",[809,4472,1440],{"class":822},[809,4474,3681],{"class":3680},[809,4476,1006],{"class":822},[809,4478,4479],{"class":950}," intervalMs",[809,4481,1440],{"class":822},[809,4483,3696],{"class":3680},[809,4485,4486],{"class":822}," },\n",[809,4488,4489,4491,4493,4495,4498,4500,4502],{"class":811,"line":1014},[809,4490,3711],{"class":950},[809,4492,1440],{"class":822},[809,4494,823],{"class":822},[809,4496,4497],{"class":950}," maxAttempts",[809,4499,1440],{"class":822},[809,4501,3725],{"class":3680},[809,4503,4486],{"class":822},[809,4505,4506,4508,4510,4512],{"class":811,"line":1051},[809,4507,3778],{"class":950},[809,4509,1440],{"class":822},[809,4511,3753],{"class":3680},[809,4513,1450],{"class":822},[809,4515,4516,4518],{"class":811,"line":1262},[809,4517,1054],{"class":822},[809,4519,1011],{"class":826},[809,4521,4522],{"class":811,"line":1466},[809,4523,891],{"emptyLinePlaceholder":890},[809,4525,4526,4528,4531,4533,4535],{"class":811,"line":1471},[809,4527,1357],{"class":919},[809,4529,4530],{"class":826}," axiom ",[809,4532,1363],{"class":822},[809,4534,873],{"class":903},[809,4536,951],{"class":826},[809,4538,4539,4541,4544,4546,4548],{"class":811,"line":3770},[809,4540,1357],{"class":919},[809,4542,4543],{"class":826}," datadog ",[809,4545,1363],{"class":822},[809,4547,4364],{"class":903},[809,4549,951],{"class":826},[809,4551,4552,4554,4557,4559,4561,4563,4565,4568,4570,4572,4574,4576,4578],{"class":811,"line":3775},[809,4553,1357],{"class":919},[809,4555,4556],{"class":826}," sentry ",[809,4558,1363],{"class":822},[809,4560,4384],{"class":903},[809,4562,907],{"class":826},[809,4564,1643],{"class":822},[809,4566,4567],{"class":950}," minLevel",[809,4569,1440],{"class":822},[809,4571,836],{"class":822},[809,4573,3820],{"class":839},[809,4575,998],{"class":822},[809,4577,830],{"class":822},[809,4579,1011],{"class":826},[809,4581,4582,4584,4587,4589,4591,4593,4595,4598,4600,4602,4605,4607,4609,4612,4614,4617,4619],{"class":811,"line":3787},[809,4583,1357],{"class":919},[809,4585,4586],{"class":826}," fs ",[809,4588,1363],{"class":822},[809,4590,4404],{"class":903},[809,4592,907],{"class":826},[809,4594,1643],{"class":822},[809,4596,4597],{"class":950}," dir",[809,4599,1440],{"class":822},[809,4601,836],{"class":822},[809,4603,4604],{"class":839},".evlog\u002Flogs",[809,4606,998],{"class":822},[809,4608,1006],{"class":822},[809,4610,4611],{"class":950}," maxFiles",[809,4613,1440],{"class":822},[809,4615,4616],{"class":3680}," 14",[809,4618,830],{"class":822},[809,4620,1011],{"class":826},[809,4622,4623],{"class":811,"line":3812},[809,4624,891],{"emptyLinePlaceholder":890},[809,4626,4627,4629,4631,4633,4635,4637,4639,4642,4644,4646,4648,4650],{"class":811,"line":3860},[809,4628,897],{"class":815},[809,4630,1401],{"class":919},[809,4632,1380],{"class":826},[809,4634,1363],{"class":822},[809,4636,932],{"class":903},[809,4638,907],{"class":826},[809,4640,4641],{"class":919},"async",[809,4643,3795],{"class":822},[809,4645,722],{"class":912},[809,4647,916],{"class":822},[809,4649,920],{"class":919},[809,4651,923],{"class":822},[809,4653,4654,4657,4660,4662,4664],{"class":811,"line":3865},[809,4655,4656],{"class":815},"  await",[809,4658,4659],{"class":943}," Promise",[809,4661,985],{"class":822},[809,4663,4262],{"class":903},[809,4665,4666],{"class":950},"([\n",[809,4668,4669,4672,4674,4676,4678],{"class":811,"line":3872},[809,4670,4671],{"class":903},"    axiom",[809,4673,907],{"class":950},[809,4675,722],{"class":826},[809,4677,916],{"class":950},[809,4679,1450],{"class":822},[809,4681,4682,4685,4687,4689,4691],{"class":811,"line":3877},[809,4683,4684],{"class":903},"    datadog",[809,4686,907],{"class":950},[809,4688,722],{"class":826},[809,4690,916],{"class":950},[809,4692,1450],{"class":822},[809,4694,4696,4699,4701,4703,4705],{"class":811,"line":4695},23,[809,4697,4698],{"class":903},"    sentry",[809,4700,907],{"class":950},[809,4702,722],{"class":826},[809,4704,916],{"class":950},[809,4706,1450],{"class":822},[809,4708,4710,4713,4715,4717,4719],{"class":811,"line":4709},24,[809,4711,4712],{"class":903},"    fs",[809,4714,907],{"class":950},[809,4716,722],{"class":826},[809,4718,916],{"class":950},[809,4720,1450],{"class":822},[809,4722,4724],{"class":811,"line":4723},25,[809,4725,4726],{"class":950},"  ])\n",[809,4728,4730,4732],{"class":811,"line":4729},26,[809,4731,1054],{"class":822},[809,4733,1011],{"class":826},[3544,4735,4737],{"id":4736},"what-fan-out-guarantees","What fan-out guarantees",[697,4739,4740,4749,4755],{},[700,4741,4742,4746,4747],{},[4743,4744,4745],"strong",{},"Parallel dispatch",": every destination receives the batch concurrently via ",[704,4748,4238],{},[700,4750,4751,4754],{},[4743,4752,4753],{},"Tolerant fanout",": if Datadog's API throws, Axiom \u002F Sentry \u002F fs still complete; the pipeline only retries the whole batch when the wrapping function rejects",[700,4756,4757,4760],{},[4743,4758,4759],{},"Shared backpressure",": the buffer is sized once for the whole pipeline; if the wrapping drain falls behind, the oldest events are dropped consistently for every destination",[3544,4762,4764],{"id":4763},"send-different-events-to-each-drain","Send different events to each drain",[614,4766,4767],{},"Wrap a destination drain so it only sees events you care about:",[799,4769,4771],{"className":4315,"code":4770,"language":4317,"meta":805,"style":805},"import type { DrainContext } from 'evlog'\n\nconst sentry = createSentryDrain({ dsn: process.env.SENTRY_DSN! })\n\nasync function sentryErrorsOnly(batch: DrainContext[]): Promise\u003Cvoid> {\n  const errors = batch.filter(c => c.event?.level === 'error')\n  if (errors.length > 0) await sentry(errors)\n}\n\nexport const drain = pipeline(async (batch) => {\n  await Promise.allSettled([\n    axiom(batch),\n    sentryErrorsOnly(batch),\n  ])\n})\n",[704,4772,4773,4793,4797,4836,4840,4875,4922,4956,4961,4965,4991,5003,5015,5028,5032],{"__ignoreMap":805},[809,4774,4775,4777,4779,4781,4783,4785,4787,4789,4791],{"class":811,"line":812},[809,4776,816],{"class":815},[809,4778,819],{"class":815},[809,4780,823],{"class":822},[809,4782,827],{"class":826},[809,4784,830],{"class":822},[809,4786,833],{"class":815},[809,4788,836],{"class":822},[809,4790,840],{"class":839},[809,4792,843],{"class":822},[809,4794,4795],{"class":811,"line":846},[809,4796,891],{"emptyLinePlaceholder":890},[809,4798,4799,4801,4803,4805,4807,4809,4811,4814,4816,4819,4821,4824,4826,4829,4832,4834],{"class":811,"line":866},[809,4800,1357],{"class":919},[809,4802,4556],{"class":826},[809,4804,1363],{"class":822},[809,4806,4384],{"class":903},[809,4808,907],{"class":826},[809,4810,1643],{"class":822},[809,4812,4813],{"class":950}," dsn",[809,4815,1440],{"class":822},[809,4817,4818],{"class":826}," process",[809,4820,985],{"class":822},[809,4822,4823],{"class":826},"env",[809,4825,985],{"class":822},[809,4827,4828],{"class":826},"SENTRY_DSN",[809,4830,4831],{"class":822},"!",[809,4833,830],{"class":822},[809,4835,1011],{"class":826},[809,4837,4838],{"class":811,"line":887},[809,4839,891],{"emptyLinePlaceholder":890},[809,4841,4842,4844,4847,4850,4852,4854,4856,4858,4861,4864,4866,4868,4871,4873],{"class":811,"line":894},[809,4843,4641],{"class":919},[809,4845,4846],{"class":919}," function",[809,4848,4849],{"class":903}," sentryErrorsOnly",[809,4851,907],{"class":822},[809,4853,722],{"class":912},[809,4855,1440],{"class":822},[809,4857,827],{"class":943},[809,4859,4860],{"class":826},"[]",[809,4862,4863],{"class":822},"):",[809,4865,4659],{"class":943},[809,4867,940],{"class":822},[809,4869,4870],{"class":943},"void",[809,4872,947],{"class":822},[809,4874,923],{"class":822},[809,4876,4877,4879,4882,4884,4887,4889,4891,4893,4896,4898,4901,4903,4906,4908,4911,4914,4916,4918,4920],{"class":811,"line":926},[809,4878,929],{"class":919},[809,4880,4881],{"class":826}," errors",[809,4883,935],{"class":822},[809,4885,4886],{"class":826}," batch",[809,4888,985],{"class":822},[809,4890,4296],{"class":903},[809,4892,907],{"class":950},[809,4894,4895],{"class":912},"c",[809,4897,920],{"class":919},[809,4899,4900],{"class":826}," c",[809,4902,985],{"class":822},[809,4904,4905],{"class":826},"event",[809,4907,3852],{"class":822},[809,4909,4910],{"class":826},"level",[809,4912,4913],{"class":822}," ===",[809,4915,836],{"class":822},[809,4917,3820],{"class":839},[809,4919,998],{"class":822},[809,4921,1011],{"class":950},[809,4923,4924,4927,4929,4932,4934,4936,4939,4942,4945,4947,4950,4952,4954],{"class":811,"line":954},[809,4925,4926],{"class":815},"  if",[809,4928,3795],{"class":950},[809,4930,4931],{"class":826},"errors",[809,4933,985],{"class":822},[809,4935,3838],{"class":826},[809,4937,4938],{"class":822}," >",[809,4940,4941],{"class":3680}," 0",[809,4943,4944],{"class":950},") ",[809,4946,2586],{"class":815},[809,4948,4949],{"class":903}," sentry",[809,4951,907],{"class":950},[809,4953,4931],{"class":826},[809,4955,1011],{"class":950},[809,4957,4958],{"class":811,"line":974},[809,4959,4960],{"class":822},"}\n",[809,4962,4963],{"class":811,"line":979},[809,4964,891],{"emptyLinePlaceholder":890},[809,4966,4967,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989],{"class":811,"line":1014},[809,4968,897],{"class":815},[809,4970,1401],{"class":919},[809,4972,1380],{"class":826},[809,4974,1363],{"class":822},[809,4976,932],{"class":903},[809,4978,907],{"class":826},[809,4980,4641],{"class":919},[809,4982,3795],{"class":822},[809,4984,722],{"class":912},[809,4986,916],{"class":822},[809,4988,920],{"class":919},[809,4990,923],{"class":822},[809,4992,4993,4995,4997,4999,5001],{"class":811,"line":1051},[809,4994,4656],{"class":815},[809,4996,4659],{"class":943},[809,4998,985],{"class":822},[809,5000,4262],{"class":903},[809,5002,4666],{"class":950},[809,5004,5005,5007,5009,5011,5013],{"class":811,"line":1262},[809,5006,4671],{"class":903},[809,5008,907],{"class":950},[809,5010,722],{"class":826},[809,5012,916],{"class":950},[809,5014,1450],{"class":822},[809,5016,5017,5020,5022,5024,5026],{"class":811,"line":1466},[809,5018,5019],{"class":903},"    sentryErrorsOnly",[809,5021,907],{"class":950},[809,5023,722],{"class":826},[809,5025,916],{"class":950},[809,5027,1450],{"class":822},[809,5029,5030],{"class":811,"line":1471},[809,5031,4726],{"class":950},[809,5033,5034,5036],{"class":811,"line":3770},[809,5035,1054],{"class":822},[809,5037,1011],{"class":826},[614,5039,5040,5041,5043],{},"Most built-in drains expose ",[704,5042,4292],{}," directly, so you only need this pattern for non-level filters (path, custom field, etc.).",[789,5045,5047],{"id":5046},"write-the-drain-yourself","Write the drain yourself",[614,5049,5050],{},"You don't need an adapter. Pass any async function that accepts a batch:",[799,5052,5055],{"className":801,"code":5053,"filename":5054,"language":803,"meta":805,"style":805},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 100 } })\n\nexport const drain = pipeline(async (batch) => {\n  await fetch('https:\u002F\u002Fyour-service.com\u002Flogs', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application\u002Fjson' },\n    body: JSON.stringify(batch.map(ctx => ctx.event)),\n  })\n})\n","pipeline-custom.ts",[704,5056,5057,5077,5095,5099,5138,5142,5168,5188,5204,5231,5273,5280],{"__ignoreMap":805},[809,5058,5059,5061,5063,5065,5067,5069,5071,5073,5075],{"class":811,"line":812},[809,5060,816],{"class":815},[809,5062,819],{"class":815},[809,5064,823],{"class":822},[809,5066,827],{"class":826},[809,5068,830],{"class":822},[809,5070,833],{"class":815},[809,5072,836],{"class":822},[809,5074,840],{"class":839},[809,5076,843],{"class":822},[809,5078,5079,5081,5083,5085,5087,5089,5091,5093],{"class":811,"line":846},[809,5080,816],{"class":815},[809,5082,823],{"class":822},[809,5084,853],{"class":826},[809,5086,830],{"class":822},[809,5088,833],{"class":815},[809,5090,836],{"class":822},[809,5092,710],{"class":839},[809,5094,843],{"class":822},[809,5096,5097],{"class":811,"line":866},[809,5098,891],{"emptyLinePlaceholder":890},[809,5100,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129,5132,5134,5136],{"class":811,"line":887},[809,5102,1357],{"class":919},[809,5104,1360],{"class":826},[809,5106,1363],{"class":822},[809,5108,853],{"class":903},[809,5110,940],{"class":822},[809,5112,944],{"class":943},[809,5114,947],{"class":822},[809,5116,907],{"class":826},[809,5118,1643],{"class":822},[809,5120,4886],{"class":950},[809,5122,1440],{"class":822},[809,5124,823],{"class":822},[809,5126,4470],{"class":950},[809,5128,1440],{"class":822},[809,5130,5131],{"class":3680}," 100",[809,5133,830],{"class":822},[809,5135,830],{"class":822},[809,5137,1011],{"class":826},[809,5139,5140],{"class":811,"line":894},[809,5141,891],{"emptyLinePlaceholder":890},[809,5143,5144,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166],{"class":811,"line":926},[809,5145,897],{"class":815},[809,5147,1401],{"class":919},[809,5149,1380],{"class":826},[809,5151,1363],{"class":822},[809,5153,932],{"class":903},[809,5155,907],{"class":826},[809,5157,4641],{"class":919},[809,5159,3795],{"class":822},[809,5161,722],{"class":912},[809,5163,916],{"class":822},[809,5165,920],{"class":919},[809,5167,923],{"class":822},[809,5169,5170,5172,5175,5177,5179,5182,5184,5186],{"class":811,"line":954},[809,5171,4656],{"class":815},[809,5173,5174],{"class":903}," fetch",[809,5176,907],{"class":950},[809,5178,998],{"class":822},[809,5180,5181],{"class":839},"https:\u002F\u002Fyour-service.com\u002Flogs",[809,5183,998],{"class":822},[809,5185,1006],{"class":822},[809,5187,923],{"class":822},[809,5189,5190,5193,5195,5197,5200,5202],{"class":811,"line":974},[809,5191,5192],{"class":950},"    method",[809,5194,1440],{"class":822},[809,5196,836],{"class":822},[809,5198,5199],{"class":839},"POST",[809,5201,998],{"class":822},[809,5203,1450],{"class":822},[809,5205,5206,5209,5211,5213,5215,5218,5220,5222,5224,5227,5229],{"class":811,"line":979},[809,5207,5208],{"class":950},"    headers",[809,5210,1440],{"class":822},[809,5212,823],{"class":822},[809,5214,836],{"class":822},[809,5216,5217],{"class":950},"Content-Type",[809,5219,998],{"class":822},[809,5221,1440],{"class":822},[809,5223,836],{"class":822},[809,5225,5226],{"class":839},"application\u002Fjson",[809,5228,998],{"class":822},[809,5230,4486],{"class":822},[809,5232,5233,5236,5238,5241,5243,5246,5248,5250,5252,5254,5256,5259,5261,5264,5266,5268,5271],{"class":811,"line":1014},[809,5234,5235],{"class":950},"    body",[809,5237,1440],{"class":822},[809,5239,5240],{"class":826}," JSON",[809,5242,985],{"class":822},[809,5244,5245],{"class":903},"stringify",[809,5247,907],{"class":950},[809,5249,722],{"class":826},[809,5251,985],{"class":822},[809,5253,104],{"class":903},[809,5255,907],{"class":950},[809,5257,5258],{"class":912},"ctx",[809,5260,920],{"class":919},[809,5262,5263],{"class":826}," ctx",[809,5265,985],{"class":822},[809,5267,4905],{"class":826},[809,5269,5270],{"class":950},"))",[809,5272,1450],{"class":822},[809,5274,5275,5278],{"class":811,"line":1051},[809,5276,5277],{"class":822},"  }",[809,5279,1011],{"class":950},[809,5281,5282,5284],{"class":811,"line":1262},[809,5283,1054],{"class":822},[809,5285,1011],{"class":826},[614,5287,5288,5289,5294],{},"For anything more involved (config resolution, retries, identity headers), use ",[618,5290,5291],{"href":535},[704,5292,5293],{},"defineHttpDrain"," instead and let the toolkit handle the boilerplate.",[789,5296,677],{"id":5297},"http-drain-browser-to-server",[614,5299,5300,5301,5304,5305,5308,5309,5312],{},"The HTTP drain ships client-side logs to your server, whatever framework serves it. It composes on top of the same pipeline primitives, with browser-specific defaults (",[704,5302,5303],{},"fetch keepalive"," + ",[704,5306,5307],{},"sendBeacon"," on ",[704,5310,5311],{},"visibilitychange",").",[3496,5314,5316,5317,5320,5321,5324,5325,5328,5329,5332,5333,5335],{"color":5315,"icon":13},"neutral","The ",[704,5318,5319],{},"evlog\u002Fbrowser"," import path is ",[4743,5322,5323],{},"deprecated"," and re-exports the same API as ",[704,5326,5327],{},"evlog\u002Fhttp",". It will be removed in the next ",[4743,5330,5331],{},"major"," release. Prefer ",[704,5334,5327],{}," for new code.",[689,5337,5340,5343,5392],{":actions":691,"description":5338,"icon":5339},"Set up the HTTP transport for client logs","i-lucide-globe",[614,5341,5342],{},"Set up the HTTP transport so my browser logs are sent to my server.",[697,5344,5345,5348,5359,5369,5376,5385],{},[700,5346,5347],{},"Install evlog: pnpm add evlog",[700,5349,702,5350,707,5353,5355,5356,5358],{},[704,5351,5352],{},"createHttpLogDrain",[704,5354,5327],{}," (NOT ",[704,5357,5319],{},", which is deprecated)",[700,5360,5361,5362,5365,5366,916],{},"Create a drain with ",[704,5363,5364],{},"{ endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' }"," and an optional pipeline (",[704,5367,5368],{},"{ batch: { size, intervalMs } }",[700,5370,5371,5372,5375],{},"Pass the drain to ",[704,5373,5374],{},"initLogger({ drain })"," on the client side",[700,5377,5378,5379,5304,5381,5308,5383],{},"The drain batches events and uses ",[704,5380,5303],{},[704,5382,5307],{},[704,5384,5311],{},[700,5386,5387,5388,5391],{},"On the server, accept POST requests with a ",[704,5389,5390],{},"DrainContext[]"," body and forward them to my drain pipeline",[614,5393,777,5394],{},[618,5395,780],{"href":780,"rel":5396},[782],[3544,5398,656],{"id":5399},"quick-start-1",[799,5401,5404],{"className":801,"code":5402,"filename":5403,"language":803,"meta":805,"style":805},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' },\n})\ninitLogger({ drain })\n\nlog.info({ action: 'page_view', path: location.pathname })\n","app.ts",[704,5405,5406,5428,5447,5451,5465,5487,5493,5507,5511],{"__ignoreMap":805},[809,5407,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426],{"class":811,"line":812},[809,5409,816],{"class":815},[809,5411,823],{"class":822},[809,5413,3371],{"class":826},[809,5415,1006],{"class":822},[809,5417,1416],{"class":826},[809,5419,830],{"class":822},[809,5421,833],{"class":815},[809,5423,836],{"class":822},[809,5425,840],{"class":839},[809,5427,843],{"class":822},[809,5429,5430,5432,5434,5437,5439,5441,5443,5445],{"class":811,"line":846},[809,5431,816],{"class":815},[809,5433,823],{"class":822},[809,5435,5436],{"class":826}," createHttpLogDrain",[809,5438,830],{"class":822},[809,5440,833],{"class":815},[809,5442,836],{"class":822},[809,5444,5327],{"class":839},[809,5446,843],{"class":822},[809,5448,5449],{"class":811,"line":866},[809,5450,891],{"emptyLinePlaceholder":890},[809,5452,5453,5455,5457,5459,5461,5463],{"class":811,"line":887},[809,5454,1357],{"class":919},[809,5456,1380],{"class":826},[809,5458,1363],{"class":822},[809,5460,5436],{"class":903},[809,5462,907],{"class":826},[809,5464,1432],{"class":822},[809,5466,5467,5469,5471,5473,5476,5478,5480,5483,5485],{"class":811,"line":894},[809,5468,1455],{"class":950},[809,5470,1440],{"class":822},[809,5472,823],{"class":822},[809,5474,5475],{"class":950}," endpoint",[809,5477,1440],{"class":822},[809,5479,836],{"class":822},[809,5481,5482],{"class":839},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest",[809,5484,998],{"class":822},[809,5486,4486],{"class":822},[809,5488,5489,5491],{"class":811,"line":926},[809,5490,1054],{"class":822},[809,5492,1011],{"class":826},[809,5494,5495,5497,5499,5501,5503,5505],{"class":811,"line":954},[809,5496,3464],{"class":903},[809,5498,907],{"class":826},[809,5500,1643],{"class":822},[809,5502,1380],{"class":826},[809,5504,1054],{"class":822},[809,5506,1011],{"class":826},[809,5508,5509],{"class":811,"line":974},[809,5510,891],{"emptyLinePlaceholder":890},[809,5512,5513,5516,5518,5521,5523,5525,5528,5530,5532,5535,5537,5539,5542,5544,5547,5549,5552,5554],{"class":811,"line":979},[809,5514,5515],{"class":826},"log",[809,5517,985],{"class":822},[809,5519,5520],{"class":903},"info",[809,5522,907],{"class":826},[809,5524,1643],{"class":822},[809,5526,5527],{"class":950}," action",[809,5529,1440],{"class":822},[809,5531,836],{"class":822},[809,5533,5534],{"class":839},"page_view",[809,5536,998],{"class":822},[809,5538,1006],{"class":822},[809,5540,5541],{"class":950}," path",[809,5543,1440],{"class":822},[809,5545,5546],{"class":826}," location",[809,5548,985],{"class":822},[809,5550,5551],{"class":826},"pathname ",[809,5553,1054],{"class":822},[809,5555,1011],{"class":826},[3544,5557,5559],{"id":5558},"how-it-works-browser-specifics","How it works (browser specifics)",[5561,5562,5563,5575,5578,5589,5596],"ol",{},[700,5564,5565,4293,5568,4293,5571,5574],{},[704,5566,5567],{},"log.info()",[704,5569,5570],{},"log.warn()",[704,5572,5573],{},"log.error()"," push events into a memory buffer",[700,5576,5577],{},"Events are batched by size (default 25) or time interval (default 2 s)",[700,5579,5580,5581,5584,5585,5588],{},"Batches are sent via ",[704,5582,5583],{},"fetch"," with ",[704,5586,5587],{},"keepalive: true"," so requests survive page navigation",[700,5590,5591,5592,5595],{},"When the page becomes hidden (tab switch, navigation), buffered events are flushed via ",[704,5593,5594],{},"navigator.sendBeacon"," as a fallback",[700,5597,5598,5599,5601],{},"Your server endpoint receives a ",[704,5600,5390],{}," JSON array and processes it however you like",[3544,5603,5605],{"id":5604},"pick-the-tier-you-need","Pick the tier you need",[5607,5608,5610],"h4",{"id":5609},"createhttplogdrainoptions",[704,5611,5612],{},"createHttpLogDrain(options)",[614,5614,5615,5616,5618,5619,5622,5623,985],{},"High-level, pre-composed: creates a pipeline with batching, retry, and auto-flush on ",[704,5617,5311],{},". Returns a ",[704,5620,5621],{},"PipelineDrainFn\u003CDrainContext>"," directly usable with ",[704,5624,5374],{},[799,5626,5628],{"className":801,"code":5627,"filename":5403,"language":803,"meta":805,"style":805},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' },\n  pipeline: { batch: { size: 50, intervalMs: 5000 } },\n})\n\ninitLogger({ drain })\nlog.info({ action: 'click', target: 'buy-button' })\n",[704,5629,5630,5652,5670,5674,5688,5708,5741,5747,5751,5765],{"__ignoreMap":805},[809,5631,5632,5634,5636,5638,5640,5642,5644,5646,5648,5650],{"class":811,"line":812},[809,5633,816],{"class":815},[809,5635,823],{"class":822},[809,5637,3371],{"class":826},[809,5639,1006],{"class":822},[809,5641,1416],{"class":826},[809,5643,830],{"class":822},[809,5645,833],{"class":815},[809,5647,836],{"class":822},[809,5649,840],{"class":839},[809,5651,843],{"class":822},[809,5653,5654,5656,5658,5660,5662,5664,5666,5668],{"class":811,"line":846},[809,5655,816],{"class":815},[809,5657,823],{"class":822},[809,5659,5436],{"class":826},[809,5661,830],{"class":822},[809,5663,833],{"class":815},[809,5665,836],{"class":822},[809,5667,5327],{"class":839},[809,5669,843],{"class":822},[809,5671,5672],{"class":811,"line":866},[809,5673,891],{"emptyLinePlaceholder":890},[809,5675,5676,5678,5680,5682,5684,5686],{"class":811,"line":887},[809,5677,1357],{"class":919},[809,5679,1380],{"class":826},[809,5681,1363],{"class":822},[809,5683,5436],{"class":903},[809,5685,907],{"class":826},[809,5687,1432],{"class":822},[809,5689,5690,5692,5694,5696,5698,5700,5702,5704,5706],{"class":811,"line":894},[809,5691,1455],{"class":950},[809,5693,1440],{"class":822},[809,5695,823],{"class":822},[809,5697,5475],{"class":950},[809,5699,1440],{"class":822},[809,5701,836],{"class":822},[809,5703,5482],{"class":839},[809,5705,998],{"class":822},[809,5707,4486],{"class":822},[809,5709,5710,5713,5715,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739],{"class":811,"line":926},[809,5711,5712],{"class":950},"  pipeline",[809,5714,1440],{"class":822},[809,5716,823],{"class":822},[809,5718,4886],{"class":950},[809,5720,1440],{"class":822},[809,5722,823],{"class":822},[809,5724,4470],{"class":950},[809,5726,1440],{"class":822},[809,5728,3681],{"class":3680},[809,5730,1006],{"class":822},[809,5732,4479],{"class":950},[809,5734,1440],{"class":822},[809,5736,3696],{"class":3680},[809,5738,830],{"class":822},[809,5740,4486],{"class":822},[809,5742,5743,5745],{"class":811,"line":954},[809,5744,1054],{"class":822},[809,5746,1011],{"class":826},[809,5748,5749],{"class":811,"line":974},[809,5750,891],{"emptyLinePlaceholder":890},[809,5752,5753,5755,5757,5759,5761,5763],{"class":811,"line":979},[809,5754,3464],{"class":903},[809,5756,907],{"class":826},[809,5758,1643],{"class":822},[809,5760,1380],{"class":826},[809,5762,1054],{"class":822},[809,5764,1011],{"class":826},[809,5766,5767,5769,5771,5773,5775,5777,5779,5781,5783,5786,5788,5790,5793,5795,5797,5800,5802,5804],{"class":811,"line":1014},[809,5768,5515],{"class":826},[809,5770,985],{"class":822},[809,5772,5520],{"class":903},[809,5774,907],{"class":826},[809,5776,1643],{"class":822},[809,5778,5527],{"class":950},[809,5780,1440],{"class":822},[809,5782,836],{"class":822},[809,5784,5785],{"class":839},"click",[809,5787,998],{"class":822},[809,5789,1006],{"class":822},[809,5791,5792],{"class":950}," target",[809,5794,1440],{"class":822},[809,5796,836],{"class":822},[809,5798,5799],{"class":839},"buy-button",[809,5801,998],{"class":822},[809,5803,830],{"class":822},[809,5805,1011],{"class":826},[5607,5807,5809],{"id":5808},"createhttpdrainconfig",[704,5810,5811],{},"createHttpDrain(config)",[614,5813,5814],{},"Low-level transport function. Use this when you want full control over the pipeline configuration:",[799,5816,5818],{"className":801,"code":5817,"filename":5403,"language":803,"meta":805,"style":805},"import { createHttpDrain } from 'evlog\u002Fhttp'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst transport = createHttpDrain({\n  endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n})\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 100, intervalMs: 10000 },\n  retry: { maxAttempts: 5 },\n})\n\nconst drain = pipeline(transport)\n",[704,5819,5820,5839,5857,5877,5881,5896,5911,5917,5937,5962,5979,5985,5989],{"__ignoreMap":805},[809,5821,5822,5824,5826,5829,5831,5833,5835,5837],{"class":811,"line":812},[809,5823,816],{"class":815},[809,5825,823],{"class":822},[809,5827,5828],{"class":826}," createHttpDrain",[809,5830,830],{"class":822},[809,5832,833],{"class":815},[809,5834,836],{"class":822},[809,5836,5327],{"class":839},[809,5838,843],{"class":822},[809,5840,5841,5843,5845,5847,5849,5851,5853,5855],{"class":811,"line":846},[809,5842,816],{"class":815},[809,5844,823],{"class":822},[809,5846,853],{"class":826},[809,5848,830],{"class":822},[809,5850,833],{"class":815},[809,5852,836],{"class":822},[809,5854,710],{"class":839},[809,5856,843],{"class":822},[809,5858,5859,5861,5863,5865,5867,5869,5871,5873,5875],{"class":811,"line":866},[809,5860,816],{"class":815},[809,5862,819],{"class":815},[809,5864,823],{"class":822},[809,5866,827],{"class":826},[809,5868,830],{"class":822},[809,5870,833],{"class":815},[809,5872,836],{"class":822},[809,5874,840],{"class":839},[809,5876,843],{"class":822},[809,5878,5879],{"class":811,"line":887},[809,5880,891],{"emptyLinePlaceholder":890},[809,5882,5883,5885,5888,5890,5892,5894],{"class":811,"line":894},[809,5884,1357],{"class":919},[809,5886,5887],{"class":826}," transport ",[809,5889,1363],{"class":822},[809,5891,5828],{"class":903},[809,5893,907],{"class":826},[809,5895,1432],{"class":822},[809,5897,5898,5901,5903,5905,5907,5909],{"class":811,"line":926},[809,5899,5900],{"class":950},"  endpoint",[809,5902,1440],{"class":822},[809,5904,836],{"class":822},[809,5906,5482],{"class":839},[809,5908,998],{"class":822},[809,5910,1450],{"class":822},[809,5912,5913,5915],{"class":811,"line":954},[809,5914,1054],{"class":822},[809,5916,1011],{"class":826},[809,5918,5919,5921,5923,5925,5927,5929,5931,5933,5935],{"class":811,"line":974},[809,5920,1357],{"class":919},[809,5922,1360],{"class":826},[809,5924,1363],{"class":822},[809,5926,853],{"class":903},[809,5928,940],{"class":822},[809,5930,944],{"class":943},[809,5932,947],{"class":822},[809,5934,907],{"class":826},[809,5936,1432],{"class":822},[809,5938,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5960],{"class":811,"line":979},[809,5940,3666],{"class":950},[809,5942,1440],{"class":822},[809,5944,823],{"class":822},[809,5946,4470],{"class":950},[809,5948,1440],{"class":822},[809,5950,5131],{"class":3680},[809,5952,1006],{"class":822},[809,5954,4479],{"class":950},[809,5956,1440],{"class":822},[809,5958,5959],{"class":3680}," 10000",[809,5961,4486],{"class":822},[809,5963,5964,5966,5968,5970,5972,5974,5977],{"class":811,"line":1014},[809,5965,3711],{"class":950},[809,5967,1440],{"class":822},[809,5969,823],{"class":822},[809,5971,4497],{"class":950},[809,5973,1440],{"class":822},[809,5975,5976],{"class":3680}," 5",[809,5978,4486],{"class":822},[809,5980,5981,5983],{"class":811,"line":1051},[809,5982,1054],{"class":822},[809,5984,1011],{"class":826},[809,5986,5987],{"class":811,"line":1262},[809,5988,891],{"emptyLinePlaceholder":890},[809,5990,5991,5993,5995,5997,5999],{"class":811,"line":1466},[809,5992,1357],{"class":919},[809,5994,1380],{"class":826},[809,5996,1363],{"class":822},[809,5998,932],{"class":903},[809,6000,6001],{"class":826},"(transport)\n",[3544,6003,6005],{"id":6004},"every-browser-option","Every browser option",[5607,6007,6009],{"id":6008},"httpdrainconfig",[704,6010,6011],{},"HttpDrainConfig",[627,6013,6014,6024],{},[630,6015,6016],{},[633,6017,6018,6020,6022],{},[636,6019,3906],{},[636,6021,3909],{},[636,6023,3912],{},[643,6025,6026,6041,6062,6076,6094],{},[633,6027,6028,6033,6035],{},[648,6029,6030],{},[704,6031,6032],{},"endpoint",[648,6034,4031],{},[648,6036,6037,6040],{},[4743,6038,6039],{},"(required)"," Full URL of the server ingest endpoint",[633,6042,6043,6048,6050],{},[648,6044,6045],{},[704,6046,6047],{},"headers",[648,6049,4031],{},[648,6051,6052,6053,6055,6056,3554,6059,916],{},"Custom headers sent with each ",[704,6054,5583],{}," request (e.g. ",[704,6057,6058],{},"Authorization",[704,6060,6061],{},"X-API-Key",[633,6063,6064,6069,6073],{},[648,6065,6066],{},[704,6067,6068],{},"timeout",[648,6070,6071],{},[704,6072,3939],{},[648,6074,6075],{},"Request timeout in milliseconds",[633,6077,6078,6083,6088],{},[648,6079,6080],{},[704,6081,6082],{},"useBeacon",[648,6084,6085],{},[704,6086,6087],{},"true",[648,6089,6090,6091,6093],{},"Use ",[704,6092,5307],{}," when the page is hidden",[633,6095,6096,6101,6106],{},[648,6097,6098],{},[704,6099,6100],{},"credentials",[648,6102,6103],{},[704,6104,6105],{},"'same-origin'",[648,6107,6108,6109,3554,6112,3554,6114,6117,6118,6120],{},"Fetch credentials mode (",[704,6110,6111],{},"'omit'",[704,6113,6105],{},[704,6115,6116],{},"'include'","). Set to ",[704,6119,6116],{}," for cross-origin endpoints",[5607,6122,6124],{"id":6123},"httplogdrainoptions",[704,6125,6126],{},"HttpLogDrainOptions",[627,6128,6129,6139],{},[630,6130,6131],{},[633,6132,6133,6135,6137],{},[636,6134,3906],{},[636,6136,3909],{},[636,6138,3912],{},[643,6140,6141,6157,6172],{},[633,6142,6143,6147,6149],{},[648,6144,6145],{},[704,6146,763],{},[648,6148,4031],{},[648,6150,6151,6153,6154,6156],{},[4743,6152,6039],{}," ",[704,6155,6011],{}," object",[633,6158,6159,6164,6169],{},[648,6160,6161],{},[704,6162,6163],{},"pipeline",[648,6165,6166],{},[704,6167,6168],{},"{ batch: { size: 25, intervalMs: 2000 }, retry: { maxAttempts: 2 } }",[648,6170,6171],{},"Pipeline configuration overrides",[633,6173,6174,6179,6183],{},[648,6175,6176],{},[704,6177,6178],{},"autoFlush",[648,6180,6181],{},[704,6182,6087],{},[648,6184,6185,6186,6188],{},"Auto-register ",[704,6187,5311],{}," flush listener",[3544,6190,6192],{"id":6191},"survive-a-closing-tab","Survive a closing tab",[3496,6194,6196,6197,6199,6200,6202,6203,6205],{"color":5520,"icon":6195},"i-lucide-radio","When ",[704,6198,6082],{}," is enabled (the default) and the page becomes hidden, the drain automatically switches from ",[704,6201,5583],{}," to ",[704,6204,5594],{},". This ensures logs are delivered even when the user closes the tab or navigates away.",[614,6207,6208,6210],{},[704,6209,5307],{}," has a browser-imposed payload limit (~64 KB). If the payload exceeds this, the drain throws an error. Keep batch sizes reasonable (the default of 25 is well within limits).",[3544,6212,6214],{"id":6213},"authenticate-the-browser-request","Authenticate the browser request",[614,6216,6217],{},"Pass custom headers to protect your ingest endpoint:",[799,6219,6221],{"className":801,"code":6220,"filename":5403,"language":803,"meta":805,"style":805},"const drain = createHttpLogDrain({\n  drain: {\n    endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest',\n    headers: {\n      'Authorization': 'Bearer ' + token,\n    },\n  },\n})\n",[704,6222,6223,6237,6245,6260,6268,6294,6299,6303],{"__ignoreMap":805},[809,6224,6225,6227,6229,6231,6233,6235],{"class":811,"line":812},[809,6226,1357],{"class":919},[809,6228,1380],{"class":826},[809,6230,1363],{"class":822},[809,6232,5436],{"class":903},[809,6234,907],{"class":826},[809,6236,1432],{"class":822},[809,6238,6239,6241,6243],{"class":811,"line":846},[809,6240,1455],{"class":950},[809,6242,1440],{"class":822},[809,6244,923],{"class":822},[809,6246,6247,6250,6252,6254,6256,6258],{"class":811,"line":866},[809,6248,6249],{"class":950},"    endpoint",[809,6251,1440],{"class":822},[809,6253,836],{"class":822},[809,6255,5482],{"class":839},[809,6257,998],{"class":822},[809,6259,1450],{"class":822},[809,6261,6262,6264,6266],{"class":811,"line":887},[809,6263,5208],{"class":950},[809,6265,1440],{"class":822},[809,6267,923],{"class":822},[809,6269,6270,6273,6275,6277,6279,6281,6284,6286,6289,6292],{"class":811,"line":894},[809,6271,6272],{"class":822},"      '",[809,6274,6058],{"class":950},[809,6276,998],{"class":822},[809,6278,1440],{"class":822},[809,6280,836],{"class":822},[809,6282,6283],{"class":839},"Bearer ",[809,6285,998],{"class":822},[809,6287,6288],{"class":822}," +",[809,6290,6291],{"class":826}," token",[809,6293,1450],{"class":822},[809,6295,6296],{"class":811,"line":926},[809,6297,6298],{"class":822},"    },\n",[809,6300,6301],{"class":811,"line":954},[809,6302,3706],{"class":822},[809,6304,6305,6307],{"class":811,"line":974},[809,6306,1054],{"class":822},[809,6308,1011],{"class":826},[3496,6310,6311,6313,6314,6316,6317,6319,6320,6322,6323,6326,6327,5584,6329,985],{"color":3498,"icon":59},[704,6312,6047],{}," are applied to ",[704,6315,5583],{}," requests only. The ",[704,6318,5307],{}," API does not support custom headers, so when the page is hidden and ",[704,6321,5307],{}," is used, headers are not sent. If your endpoint requires authentication, validate via a session cookie (set ",[704,6324,6325],{},"credentials: 'include'"," for cross-origin endpoints) or disable ",[704,6328,5307],{},[704,6330,6331],{},"useBeacon: false",[3544,6333,6335],{"id":6334},"server-endpoint","Server endpoint",[614,6337,6338,6339,6341],{},"Your server needs a POST endpoint that accepts a ",[704,6340,5390],{}," JSON body. Examples for common frameworks:",[796,6343,6344,6485],{},[799,6345,6347],{"className":801,"code":6346,"filename":275,"language":803,"meta":2103,"style":805},"app.post('\u002Fv1\u002Fingest', express.json(), (req, res) => {\n  for (const entry of req.body) {\n    console.log('[BROWSER]', JSON.stringify(entry))\n  }\n  res.sendStatus(204)\n})\n",[704,6348,6349,6398,6425,6457,6462,6479],{"__ignoreMap":805},[809,6350,6351,6353,6355,6358,6360,6362,6365,6367,6369,6372,6374,6377,6380,6382,6384,6387,6389,6392,6394,6396],{"class":811,"line":812},[809,6352,2227],{"class":826},[809,6354,985],{"class":822},[809,6356,6357],{"class":903},"post",[809,6359,907],{"class":826},[809,6361,998],{"class":822},[809,6363,6364],{"class":839},"\u002Fv1\u002Fingest",[809,6366,998],{"class":822},[809,6368,1006],{"class":822},[809,6370,6371],{"class":826}," express",[809,6373,985],{"class":822},[809,6375,6376],{"class":903},"json",[809,6378,6379],{"class":826},"()",[809,6381,1006],{"class":822},[809,6383,3795],{"class":822},[809,6385,6386],{"class":912},"req",[809,6388,1006],{"class":822},[809,6390,6391],{"class":912}," res",[809,6393,916],{"class":822},[809,6395,920],{"class":919},[809,6397,923],{"class":822},[809,6399,6400,6403,6405,6407,6410,6413,6416,6418,6421,6423],{"class":811,"line":846},[809,6401,6402],{"class":815},"  for",[809,6404,3795],{"class":950},[809,6406,1357],{"class":919},[809,6408,6409],{"class":826}," entry",[809,6411,6412],{"class":822}," of",[809,6414,6415],{"class":826}," req",[809,6417,985],{"class":822},[809,6419,6420],{"class":826},"body",[809,6422,4944],{"class":950},[809,6424,1432],{"class":822},[809,6426,6427,6429,6431,6433,6435,6437,6440,6442,6444,6446,6448,6450,6452,6455],{"class":811,"line":866},[809,6428,3815],{"class":826},[809,6430,985],{"class":822},[809,6432,5515],{"class":903},[809,6434,907],{"class":950},[809,6436,998],{"class":822},[809,6438,6439],{"class":839},"[BROWSER]",[809,6441,998],{"class":822},[809,6443,1006],{"class":822},[809,6445,5240],{"class":826},[809,6447,985],{"class":822},[809,6449,5245],{"class":903},[809,6451,907],{"class":950},[809,6453,6454],{"class":826},"entry",[809,6456,2247],{"class":950},[809,6458,6459],{"class":811,"line":887},[809,6460,6461],{"class":822},"  }\n",[809,6463,6464,6467,6469,6472,6474,6477],{"class":811,"line":894},[809,6465,6466],{"class":826},"  res",[809,6468,985],{"class":822},[809,6470,6471],{"class":903},"sendStatus",[809,6473,907],{"class":950},[809,6475,6476],{"class":3680},"204",[809,6478,1011],{"class":950},[809,6480,6481,6483],{"class":811,"line":926},[809,6482,1054],{"class":822},[809,6484,1011],{"class":826},[799,6486,6488],{"className":801,"code":6487,"filename":280,"language":803,"meta":2103,"style":805},"app.post('\u002Fv1\u002Fingest', async (c) => {\n  const body = await c.req.json()\n  for (const entry of body) {\n    console.log('[BROWSER]', JSON.stringify(entry))\n  }\n  return c.body(null, 204)\n})\n",[704,6489,6490,6521,6545,6563,6593,6597,6618],{"__ignoreMap":805},[809,6491,6492,6494,6496,6498,6500,6502,6504,6506,6508,6511,6513,6515,6517,6519],{"class":811,"line":812},[809,6493,2227],{"class":826},[809,6495,985],{"class":822},[809,6497,6357],{"class":903},[809,6499,907],{"class":826},[809,6501,998],{"class":822},[809,6503,6364],{"class":839},[809,6505,998],{"class":822},[809,6507,1006],{"class":822},[809,6509,6510],{"class":919}," async",[809,6512,3795],{"class":822},[809,6514,4895],{"class":912},[809,6516,916],{"class":822},[809,6518,920],{"class":919},[809,6520,923],{"class":822},[809,6522,6523,6525,6528,6530,6533,6535,6537,6539,6541,6543],{"class":811,"line":846},[809,6524,929],{"class":919},[809,6526,6527],{"class":826}," body",[809,6529,935],{"class":822},[809,6531,6532],{"class":815}," await",[809,6534,4900],{"class":826},[809,6536,985],{"class":822},[809,6538,6386],{"class":826},[809,6540,985],{"class":822},[809,6542,6376],{"class":903},[809,6544,951],{"class":950},[809,6546,6547,6549,6551,6553,6555,6557,6559,6561],{"class":811,"line":866},[809,6548,6402],{"class":815},[809,6550,3795],{"class":950},[809,6552,1357],{"class":919},[809,6554,6409],{"class":826},[809,6556,6412],{"class":822},[809,6558,6527],{"class":826},[809,6560,4944],{"class":950},[809,6562,1432],{"class":822},[809,6564,6565,6567,6569,6571,6573,6575,6577,6579,6581,6583,6585,6587,6589,6591],{"class":811,"line":887},[809,6566,3815],{"class":826},[809,6568,985],{"class":822},[809,6570,5515],{"class":903},[809,6572,907],{"class":950},[809,6574,998],{"class":822},[809,6576,6439],{"class":839},[809,6578,998],{"class":822},[809,6580,1006],{"class":822},[809,6582,5240],{"class":826},[809,6584,985],{"class":822},[809,6586,5245],{"class":903},[809,6588,907],{"class":950},[809,6590,6454],{"class":826},[809,6592,2247],{"class":950},[809,6594,6595],{"class":811,"line":894},[809,6596,6461],{"class":822},[809,6598,6599,6602,6604,6606,6608,6610,6613,6616],{"class":811,"line":926},[809,6600,6601],{"class":815},"  return",[809,6603,4900],{"class":826},[809,6605,985],{"class":822},[809,6607,6420],{"class":903},[809,6609,907],{"class":950},[809,6611,6612],{"class":822},"null,",[809,6614,6615],{"class":3680}," 204",[809,6617,1011],{"class":950},[809,6619,6620,6622],{"class":811,"line":954},[809,6621,1054],{"class":822},[809,6623,1011],{"class":826},[614,6625,6626,6627,6632],{},"See the full ",[618,6628,6631],{"href":6629,"rel":6630},"https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbrowser",[782],"browser example"," for a working Hono server + browser page.",[789,6634,6636],{"id":6635},"mistakes-that-cost-you-events","Mistakes that cost you events",[697,6638,6639,6647,6655,6661],{},[700,6640,6641,6646],{},[4743,6642,4300,6643,6645],{},[704,6644,751],{}," on shutdown",": buffered events are lost otherwise",[700,6648,6649,6654],{},[4743,6650,4276,6651,6653],{},[704,6652,3526],{}," to match your provider's recommended payload",": too small wastes overhead, too big risks rejection",[700,6656,6657,6660],{},[4743,6658,6659],{},"Don't run one pipeline per drain unless you need per-destination retries",": sharing one pipeline keeps batching + buffering coherent",[700,6662,6663,6666,6667,6670],{},[4743,6664,6665],{},"Don't fan out to a serverless-incompatible target without checking",": the ",[618,6668,6669],{"href":495},"stream server"," reaches every connected client through the in-process stream; it's not a drain",[789,6672,6674],{"id":6673},"next-steps","Next steps",[697,6676,6677,6688,6694,6699],{},[700,6678,6679,6682,6683,4293,6685],{},[618,6680,6681],{"href":535},"Custom Drains",": build a drain for any backend with ",[704,6684,5293],{},[704,6686,6687],{},"defineDrain",[700,6689,6690,6693],{},[618,6691,6692],{"href":158},"Adapters Overview",": built-in adapters that work with the pipeline out of the box",[700,6695,6696,6698],{},[618,6697,565],{"href":566},": security and production tips",[700,6700,6701,6704],{},[618,6702,6703],{"href":333},"Client logging",": end-to-end browser → server flow",[6706,6707,6708],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":805,"searchDepth":846,"depth":846,"links":6710},[6711,6712,6715,6720,6721,6726,6727,6736,6737],{"id":791,"depth":846,"text":656},{"id":3516,"depth":846,"text":3517,"children":6713},[6714],{"id":3546,"depth":866,"text":3547},{"id":3575,"depth":846,"text":552,"children":6716},[6717,6718,6719],{"id":3896,"depth":866,"text":3897},{"id":4037,"depth":866,"text":4038},{"id":4096,"depth":866,"text":4097},{"id":4180,"depth":846,"text":3513},{"id":4229,"depth":846,"text":667,"children":6722},[6723,6724,6725],{"id":4311,"depth":866,"text":4312},{"id":4736,"depth":866,"text":4737},{"id":4763,"depth":866,"text":4764},{"id":5046,"depth":846,"text":5047},{"id":5297,"depth":846,"text":677,"children":6728},[6729,6730,6731,6732,6733,6734,6735],{"id":5399,"depth":866,"text":656},{"id":5558,"depth":866,"text":5559},{"id":5604,"depth":866,"text":5605},{"id":6004,"depth":866,"text":6005},{"id":6191,"depth":866,"text":6192},{"id":6213,"depth":866,"text":6214},{"id":6334,"depth":866,"text":6335},{"id":6635,"depth":846,"text":6636},{"id":6673,"depth":846,"text":6674},"The pipeline wraps every drain: it batches events, retries on failure, fans out to several destinations, and ships browser logs.","md",[6741,6743],{"label":6681,"icon":537,"to":535,"color":5315,"variant":6742},"subtle",{"label":6692,"icon":6744,"to":158,"color":5315,"variant":6742},"i-custom-plug",{},{"title":539,"icon":542},{"title":609,"description":6738},"zKJJnD3xsO55CEWzy7kYuzoml9pD8fdvvGFcxM7Ko98",[6750,6752],{"title":534,"path":535,"stem":536,"description":6751,"icon":537,"children":-1},"Build a drain for any backend without a built-in adapter. Config resolution, retries, timeouts, and identity headers are handled for you.",{"title":41,"path":548,"stem":549,"description":6753,"icon":550,"children":-1},"Every option, every number, and every comparison, in one place. Start here when you know what evlog does and need the exact value.",1791113184266]