[{"data":1,"prerenderedAt":2685},["ShallowReactive",2],{"navigation_docs":3,"-adapters-building-blocks-pipeline":547,"-adapters-building-blocks-pipeline-surround":2680},[4,35,159,201,289,446,531],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,325,346,373,400,428],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Observers","\u002Fbuild-on-top\u002Fobservers","5.build-on-top\u002Fobservers",[302,306,311,316,321],{"title":41,"path":303,"stem":304,"icon":305},"\u002Fbuild-on-top\u002Fobservers\u002Foverview","5.build-on-top\u002Fobservers\u002F1.overview","i-lucide-eye",{"title":307,"path":308,"stem":309,"icon":310},"Stream API","\u002Fbuild-on-top\u002Fobservers\u002Fin-process-stream","5.build-on-top\u002Fobservers\u002F2.in-process-stream","i-lucide-radio-tower",{"title":312,"path":313,"stem":314,"icon":315},"Stream server","\u002Fbuild-on-top\u002Fobservers\u002Fstream-server","5.build-on-top\u002Fobservers\u002F3.stream-server","i-lucide-radio",{"title":317,"path":318,"stem":319,"icon":320},"FS reader","\u002Fbuild-on-top\u002Fobservers\u002Ffs-reader","5.build-on-top\u002Fobservers\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":322,"stem":323,"icon":324},"\u002Fbuild-on-top\u002Fobservers\u002Fconsumer-recipes","5.build-on-top\u002Fobservers\u002F5.consumer-recipes","i-lucide-chef-hat",{"title":326,"path":327,"stem":328,"children":329,"page":34},"Pipeline","\u002Fbuild-on-top\u002Fpipeline","5.build-on-top\u002Fpipeline",[330,334,338,342],{"title":41,"path":331,"stem":332,"icon":333},"\u002Fbuild-on-top\u002Fpipeline\u002Foverview","5.build-on-top\u002Fpipeline\u002F1.overview","i-lucide-workflow",{"title":335,"path":336,"stem":337,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fpipeline\u002Fplugins","5.build-on-top\u002Fpipeline\u002F2.plugins",{"title":339,"path":340,"stem":341,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fpipeline\u002Fcustom-enrichers","5.build-on-top\u002Fpipeline\u002F3.custom-enrichers",{"title":343,"path":344,"stem":345,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Fpipeline\u002Ftail-sampling","5.build-on-top\u002Fpipeline\u002F4.tail-sampling",{"title":347,"path":348,"stem":349,"children":350,"page":34},"Scenarios","\u002Fbuild-on-top\u002Fscenarios","5.build-on-top\u002Fscenarios",[351,355,359,364,368],{"title":41,"path":352,"stem":353,"icon":354},"\u002Fbuild-on-top\u002Fscenarios\u002Foverview","5.build-on-top\u002Fscenarios\u002F0.overview","i-lucide-clipboard-list",{"title":356,"path":357,"stem":358,"icon":49},"Local debugging toolkit","\u002Fbuild-on-top\u002Fscenarios\u002Flocal-debugging-toolkit","5.build-on-top\u002Fscenarios\u002F1.local-debugging-toolkit",{"title":360,"path":361,"stem":362,"icon":363},"Tenant-aware logging","\u002Fbuild-on-top\u002Fscenarios\u002Ftenant-aware-logging","5.build-on-top\u002Fscenarios\u002F2.tenant-aware-logging","i-lucide-users",{"title":365,"path":366,"stem":367,"icon":129},"Compliance audit","\u002Fbuild-on-top\u002Fscenarios\u002Fcompliance-audit","5.build-on-top\u002Fscenarios\u002F3.compliance-audit",{"title":369,"path":370,"stem":371,"icon":372},"Cross-app error vocab","\u002Fbuild-on-top\u002Fscenarios\u002Fcross-app-error-vocab","5.build-on-top\u002Fscenarios\u002F4.cross-app-error-vocab","i-lucide-book",{"title":374,"path":375,"stem":376,"children":377,"page":34},"Shared packages","\u002Fbuild-on-top\u002Fshared","5.build-on-top\u002Fshared",[378,382,386,391,395],{"title":41,"path":379,"stem":380,"icon":381},"\u002Fbuild-on-top\u002Fshared\u002Foverview","5.build-on-top\u002Fshared\u002F1.overview","i-lucide-package",{"title":383,"path":384,"stem":385,"icon":381},"Catalogs as packages","\u002Fbuild-on-top\u002Fshared\u002Fcatalogs-as-packages","5.build-on-top\u002Fshared\u002F2.catalogs-as-packages",{"title":387,"path":388,"stem":389,"icon":390},"Drains as packages","\u002Fbuild-on-top\u002Fshared\u002Fdrains-as-packages","5.build-on-top\u002Fshared\u002F3.drains-as-packages","i-lucide-package-2",{"title":392,"path":393,"stem":394,"icon":28},"Enrichers as packages","\u002Fbuild-on-top\u002Fshared\u002Fenrichers-as-packages","5.build-on-top\u002Fshared\u002F4.enrichers-as-packages",{"title":396,"path":397,"stem":398,"icon":399},"Integration as package","\u002Fbuild-on-top\u002Fshared\u002Fintegration-as-package","5.build-on-top\u002Fshared\u002F5.integration-as-package","i-lucide-package-check",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Sinks","\u002Fbuild-on-top\u002Fsinks","5.build-on-top\u002Fsinks",[405,409,414,418,423],{"title":41,"path":406,"stem":407,"icon":408},"\u002Fbuild-on-top\u002Fsinks\u002Foverview","5.build-on-top\u002Fsinks\u002F1.overview","i-lucide-arrow-up-from-line",{"title":410,"path":411,"stem":412,"icon":413},"Custom drains","\u002Fbuild-on-top\u002Fsinks\u002Fcustom-drains","5.build-on-top\u002Fsinks\u002F2.custom-drains","i-lucide-code-2",{"title":415,"path":416,"stem":417,"icon":333},"Drain pipeline","\u002Fbuild-on-top\u002Fsinks\u002Fdrain-pipeline","5.build-on-top\u002Fsinks\u002F3.drain-pipeline",{"title":419,"path":420,"stem":421,"icon":422},"Identity headers","\u002Fbuild-on-top\u002Fsinks\u002Fidentity-headers","5.build-on-top\u002Fsinks\u002F4.identity-headers","i-lucide-fingerprint",{"title":424,"path":425,"stem":426,"icon":427},"Fanout","\u002Fbuild-on-top\u002Fsinks\u002Ffanout-and-multi-drain","5.build-on-top\u002Fsinks\u002F5.fanout-and-multi-drain","i-lucide-share-2",{"title":429,"path":430,"stem":431,"children":432,"page":34},"Sources","\u002Fbuild-on-top\u002Fsources","5.build-on-top\u002Fsources",[433,437,441],{"title":41,"path":434,"stem":435,"icon":436},"\u002Fbuild-on-top\u002Fsources\u002Foverview","5.build-on-top\u002Fsources\u002F1.overview","i-lucide-arrow-down-to-line",{"title":438,"path":439,"stem":440,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fsources\u002Fcustom-framework","5.build-on-top\u002Fsources\u002F2.custom-framework",{"title":442,"path":443,"stem":444,"icon":445},"Middleware toolkit","\u002Fbuild-on-top\u002Fsources\u002Fmiddleware-toolkit","5.build-on-top\u002Fsources\u002F3.middleware-toolkit","i-lucide-wrench",{"title":447,"path":448,"stem":449,"children":450,"page":34},"Adapters","\u002Fadapters","6.adapters",[451,454,494,509],{"title":41,"path":452,"stem":453,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":455,"path":456,"stem":457,"children":458,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[459,464,469,474,479,484,489],{"title":460,"path":461,"stem":462,"icon":463},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":465,"path":466,"stem":467,"icon":468},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":470,"path":471,"stem":472,"icon":473},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":475,"path":476,"stem":477,"icon":478},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":480,"path":481,"stem":482,"icon":483},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":485,"path":486,"stem":487,"icon":488},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":490,"path":491,"stem":492,"icon":493},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":495,"path":496,"stem":497,"children":498,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[499,504],{"title":500,"path":501,"stem":502,"icon":503},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":505,"path":506,"stem":507,"icon":508},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":510,"path":511,"stem":512,"children":513,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[514,517,522,526],{"title":326,"path":515,"stem":516,"icon":333},"\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":518,"path":519,"stem":520,"icon":521},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":523,"path":524,"stem":525,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":527,"path":528,"stem":529,"icon":530},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":532,"path":533,"stem":534,"children":535,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[536,539,543],{"title":41,"path":537,"stem":538,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":540,"path":541,"stem":542,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":544,"path":545,"stem":546,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":548,"title":549,"body":550,"description":2669,"extension":2670,"links":2671,"meta":2676,"navigation":2677,"path":515,"seo":2678,"stem":516,"__hash__":2679},"docs\u002F6.adapters\u002F04.building-blocks\u002F01.pipeline.md","Drain Pipeline",{"type":551,"value":552,"toc":2657},"minimark",[553,557,605,609,612,1481,1501,1505,1508,1534,1537,1547,1869,1874,2017,2021,2076,2080,2087,2147,2151,2154,2364,2368,2371,2616,2631,2635,2653],[554,555,556],"p",{},"In production, sending one HTTP request per log event is wasteful. The drain pipeline buffers events and sends them in batches, retries on transient failures, and drops the oldest events when the buffer overflows.",[558,559,562,565,591],"prompt",{":actions":560,"description":561,"icon":333},"[\"copy\",\"cursor\",\"windsurf\"]","Add the drain pipeline (batch + retry + fan-out)",[554,563,564],{},"Wrap my evlog drain in the shared pipeline (batch + retry + buffer overflow protection).",[566,567,568,572,575,582,585,588],"ul",{},[569,570,571],"li",{},"Identify my framework and follow its evlog wiring pattern",[569,573,574],{},"Import createDrainPipeline from 'evlog\u002Fpipeline' and the adapter (e.g. evlog\u002Faxiom)",[569,576,577,578],{},"Wrap the adapter: const drain = createDrainPipeline",[579,580,581],"drain-context",{},"()(createAxiomDrain())",[569,583,584],{},"Configure batch ({ size, intervalMs }), retry ({ maxAttempts, backoff }), and bufferSize options",[569,586,587],{},"Use fan-out to send to multiple drains at once: pipeline(...adapters)",[569,589,590],{},"Hook drain.flush() on framework close \u002F SIGTERM so buffered events aren't lost on shutdown",[554,592,593,594,600,601],{},"Docs: ",[595,596,597],"a",{"href":597,"rel":598},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline",[599],"nofollow","\nAdapters: ",[595,602,603],{"href":603,"rel":604},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Foverview",[599],[606,607,20],"h2",{"id":608},"quick-start",[554,610,611],{},"The pipeline wraps any drain. The wiring depends on your framework — pick the tab that matches yours; every other example below uses the same shape.",[613,614,615,884,1121,1317],"code-group",{},[616,617,623],"pre",{"className":618,"code":619,"filename":620,"language":621,"meta":622,"style":622},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nimport 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","Nuxt \u002F Nitro","typescript","",[624,625,626,635,669,690,711,718,750,778,798,803,838,876],"code",{"__ignoreMap":622},[627,628,631],"span",{"class":629,"line":630},"line",1,[627,632,634],{"class":633},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[627,636,638,642,645,649,653,656,659,662,666],{"class":629,"line":637},2,[627,639,641],{"class":640},"s7zQu","import",[627,643,644],{"class":640}," type",[627,646,648],{"class":647},"sMK4o"," {",[627,650,652],{"class":651},"sTEyZ"," DrainContext",[627,654,655],{"class":647}," }",[627,657,658],{"class":640}," from",[627,660,661],{"class":647}," '",[627,663,665],{"class":664},"sfazB","evlog",[627,667,668],{"class":647},"'\n",[627,670,672,674,676,679,681,683,685,688],{"class":629,"line":671},3,[627,673,641],{"class":640},[627,675,648],{"class":647},[627,677,678],{"class":651}," createDrainPipeline",[627,680,655],{"class":647},[627,682,658],{"class":640},[627,684,661],{"class":647},[627,686,687],{"class":664},"evlog\u002Fpipeline",[627,689,668],{"class":647},[627,691,693,695,697,700,702,704,706,709],{"class":629,"line":692},4,[627,694,641],{"class":640},[627,696,648],{"class":647},[627,698,699],{"class":651}," createAxiomDrain",[627,701,655],{"class":647},[627,703,658],{"class":640},[627,705,661],{"class":647},[627,707,708],{"class":664},"evlog\u002Faxiom",[627,710,668],{"class":647},[627,712,714],{"class":629,"line":713},5,[627,715,717],{"emptyLinePlaceholder":716},true,"\n",[627,719,721,724,727,731,734,736,740,743,747],{"class":629,"line":720},6,[627,722,723],{"class":640},"export",[627,725,726],{"class":640}," default",[627,728,730],{"class":729},"s2Zo4"," defineNitroPlugin",[627,732,733],{"class":651},"(",[627,735,733],{"class":647},[627,737,739],{"class":738},"sHdIc","nitroApp",[627,741,742],{"class":647},")",[627,744,746],{"class":745},"spNyl"," =>",[627,748,749],{"class":647}," {\n",[627,751,753,756,759,762,764,767,771,774],{"class":629,"line":752},7,[627,754,755],{"class":745},"  const",[627,757,758],{"class":651}," pipeline",[627,760,761],{"class":647}," =",[627,763,678],{"class":729},[627,765,766],{"class":647},"\u003C",[627,768,770],{"class":769},"sBMFI","DrainContext",[627,772,773],{"class":647},">",[627,775,777],{"class":776},"swJcz","()\n",[627,779,781,783,786,788,790,792,795],{"class":629,"line":780},8,[627,782,755],{"class":745},[627,784,785],{"class":651}," drain",[627,787,761],{"class":647},[627,789,758],{"class":729},[627,791,733],{"class":776},[627,793,794],{"class":729},"createAxiomDrain",[627,796,797],{"class":776},"())\n",[627,799,801],{"class":629,"line":800},9,[627,802,717],{"emptyLinePlaceholder":716},[627,804,806,809,812,815,817,820,822,825,828,830,833,835],{"class":629,"line":805},10,[627,807,808],{"class":651},"  nitroApp",[627,810,811],{"class":647},".",[627,813,814],{"class":651},"hooks",[627,816,811],{"class":647},[627,818,819],{"class":729},"hook",[627,821,733],{"class":776},[627,823,824],{"class":647},"'",[627,826,827],{"class":664},"evlog:drain",[627,829,824],{"class":647},[627,831,832],{"class":647},",",[627,834,785],{"class":651},[627,836,837],{"class":776},")\n",[627,839,841,843,845,847,849,851,853,855,858,860,862,865,867,869,871,874],{"class":629,"line":840},11,[627,842,808],{"class":651},[627,844,811],{"class":647},[627,846,814],{"class":651},[627,848,811],{"class":647},[627,850,819],{"class":729},[627,852,733],{"class":776},[627,854,824],{"class":647},[627,856,857],{"class":664},"close",[627,859,824],{"class":647},[627,861,832],{"class":647},[627,863,864],{"class":647}," ()",[627,866,746],{"class":745},[627,868,785],{"class":651},[627,870,811],{"class":647},[627,872,873],{"class":729},"flush",[627,875,797],{"class":776},[627,877,879,882],{"class":629,"line":878},12,[627,880,881],{"class":647},"}",[627,883,837],{"class":651},[616,885,887],{"className":618,"code":886,"filename":216,"language":621,"meta":622,"style":622},"\u002F\u002F lib\u002Fevlog.ts\nimport 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\n\u002F\u002F Flush before shutdown (e.g. from your custom server or a teardown hook)\nexport const flushEvlog = () => drain.flush()\n",[624,888,889,894,914,934,952,970,974,995,1012,1016,1054,1072,1079,1086,1091,1097],{"__ignoreMap":622},[627,890,891],{"class":629,"line":630},[627,892,893],{"class":633},"\u002F\u002F lib\u002Fevlog.ts\n",[627,895,896,898,900,902,904,906,908,910,912],{"class":629,"line":637},[627,897,641],{"class":640},[627,899,644],{"class":640},[627,901,648],{"class":647},[627,903,652],{"class":651},[627,905,655],{"class":647},[627,907,658],{"class":640},[627,909,661],{"class":647},[627,911,665],{"class":664},[627,913,668],{"class":647},[627,915,916,918,920,923,925,927,929,932],{"class":629,"line":671},[627,917,641],{"class":640},[627,919,648],{"class":647},[627,921,922],{"class":651}," createEvlog",[627,924,655],{"class":647},[627,926,658],{"class":640},[627,928,661],{"class":647},[627,930,931],{"class":664},"evlog\u002Fnext",[627,933,668],{"class":647},[627,935,936,938,940,942,944,946,948,950],{"class":629,"line":692},[627,937,641],{"class":640},[627,939,648],{"class":647},[627,941,678],{"class":651},[627,943,655],{"class":647},[627,945,658],{"class":640},[627,947,661],{"class":647},[627,949,687],{"class":664},[627,951,668],{"class":647},[627,953,954,956,958,960,962,964,966,968],{"class":629,"line":713},[627,955,641],{"class":640},[627,957,648],{"class":647},[627,959,699],{"class":651},[627,961,655],{"class":647},[627,963,658],{"class":640},[627,965,661],{"class":647},[627,967,708],{"class":664},[627,969,668],{"class":647},[627,971,972],{"class":629,"line":720},[627,973,717],{"emptyLinePlaceholder":716},[627,975,976,979,982,985,987,989,991,993],{"class":629,"line":752},[627,977,978],{"class":745},"const",[627,980,981],{"class":651}," pipeline ",[627,983,984],{"class":647},"=",[627,986,678],{"class":729},[627,988,766],{"class":647},[627,990,770],{"class":769},[627,992,773],{"class":647},[627,994,777],{"class":651},[627,996,997,999,1002,1004,1006,1008,1010],{"class":629,"line":780},[627,998,978],{"class":745},[627,1000,1001],{"class":651}," drain ",[627,1003,984],{"class":647},[627,1005,758],{"class":729},[627,1007,733],{"class":651},[627,1009,794],{"class":729},[627,1011,797],{"class":651},[627,1013,1014],{"class":629,"line":800},[627,1015,717],{"emptyLinePlaceholder":716},[627,1017,1018,1020,1023,1025,1028,1030,1033,1035,1038,1040,1043,1045,1047,1049,1051],{"class":629,"line":805},[627,1019,723],{"class":640},[627,1021,1022],{"class":745}," const",[627,1024,648],{"class":647},[627,1026,1027],{"class":651}," withEvlog",[627,1029,832],{"class":647},[627,1031,1032],{"class":651}," useLogger",[627,1034,832],{"class":647},[627,1036,1037],{"class":651}," log",[627,1039,832],{"class":647},[627,1041,1042],{"class":651}," createError ",[627,1044,881],{"class":647},[627,1046,761],{"class":647},[627,1048,922],{"class":729},[627,1050,733],{"class":651},[627,1052,1053],{"class":647},"{\n",[627,1055,1056,1059,1062,1064,1067,1069],{"class":629,"line":840},[627,1057,1058],{"class":776},"  service",[627,1060,1061],{"class":647},":",[627,1063,661],{"class":647},[627,1065,1066],{"class":664},"my-app",[627,1068,824],{"class":647},[627,1070,1071],{"class":647},",\n",[627,1073,1074,1077],{"class":629,"line":878},[627,1075,1076],{"class":651},"  drain",[627,1078,1071],{"class":647},[627,1080,1082,1084],{"class":629,"line":1081},13,[627,1083,881],{"class":647},[627,1085,837],{"class":651},[627,1087,1089],{"class":629,"line":1088},14,[627,1090,717],{"emptyLinePlaceholder":716},[627,1092,1094],{"class":629,"line":1093},15,[627,1095,1096],{"class":633},"\u002F\u002F Flush before shutdown (e.g. from your custom server or a teardown hook)\n",[627,1098,1100,1102,1104,1107,1109,1111,1113,1115,1117,1119],{"class":629,"line":1099},16,[627,1101,723],{"class":640},[627,1103,1022],{"class":745},[627,1105,1106],{"class":651}," flushEvlog ",[627,1108,984],{"class":647},[627,1110,864],{"class":647},[627,1112,746],{"class":745},[627,1114,785],{"class":651},[627,1116,811],{"class":647},[627,1118,873],{"class":729},[627,1120,777],{"class":651},[616,1122,1125],{"className":618,"code":1123,"filename":1124,"language":621,"meta":622,"style":622},"\u002F\u002F Same pattern — pass `drain` to the framework's evlog middleware\u002Fmodule\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 })) \u002F\u002F Hono \u002F Express \u002F Elysia\n\u002F\u002F await app.register(evlog, { drain }) \u002F\u002F Fastify\n\u002F\u002F EvlogModule.forRoot({ drain }) \u002F\u002F NestJS\n\n\u002F\u002F Flush on shutdown\nprocess.on('SIGTERM', () => drain.flush())\n","Hono \u002F Express \u002F Fastify \u002F Elysia \u002F NestJS",[624,1126,1127,1132,1152,1170,1188,1192,1210,1226,1230,1259,1267,1275,1279,1284],{"__ignoreMap":622},[627,1128,1129],{"class":629,"line":630},[627,1130,1131],{"class":633},"\u002F\u002F Same pattern — pass `drain` to the framework's evlog middleware\u002Fmodule\n",[627,1133,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":629,"line":637},[627,1135,641],{"class":640},[627,1137,644],{"class":640},[627,1139,648],{"class":647},[627,1141,652],{"class":651},[627,1143,655],{"class":647},[627,1145,658],{"class":640},[627,1147,661],{"class":647},[627,1149,665],{"class":664},[627,1151,668],{"class":647},[627,1153,1154,1156,1158,1160,1162,1164,1166,1168],{"class":629,"line":671},[627,1155,641],{"class":640},[627,1157,648],{"class":647},[627,1159,678],{"class":651},[627,1161,655],{"class":647},[627,1163,658],{"class":640},[627,1165,661],{"class":647},[627,1167,687],{"class":664},[627,1169,668],{"class":647},[627,1171,1172,1174,1176,1178,1180,1182,1184,1186],{"class":629,"line":692},[627,1173,641],{"class":640},[627,1175,648],{"class":647},[627,1177,699],{"class":651},[627,1179,655],{"class":647},[627,1181,658],{"class":640},[627,1183,661],{"class":647},[627,1185,708],{"class":664},[627,1187,668],{"class":647},[627,1189,1190],{"class":629,"line":713},[627,1191,717],{"emptyLinePlaceholder":716},[627,1193,1194,1196,1198,1200,1202,1204,1206,1208],{"class":629,"line":720},[627,1195,978],{"class":745},[627,1197,981],{"class":651},[627,1199,984],{"class":647},[627,1201,678],{"class":729},[627,1203,766],{"class":647},[627,1205,770],{"class":769},[627,1207,773],{"class":647},[627,1209,777],{"class":651},[627,1211,1212,1214,1216,1218,1220,1222,1224],{"class":629,"line":752},[627,1213,978],{"class":745},[627,1215,1001],{"class":651},[627,1217,984],{"class":647},[627,1219,758],{"class":729},[627,1221,733],{"class":651},[627,1223,794],{"class":729},[627,1225,797],{"class":651},[627,1227,1228],{"class":629,"line":780},[627,1229,717],{"emptyLinePlaceholder":716},[627,1231,1232,1235,1237,1240,1242,1244,1246,1249,1251,1253,1256],{"class":629,"line":800},[627,1233,1234],{"class":651},"app",[627,1236,811],{"class":647},[627,1238,1239],{"class":729},"use",[627,1241,733],{"class":651},[627,1243,665],{"class":729},[627,1245,733],{"class":651},[627,1247,1248],{"class":647},"{",[627,1250,1001],{"class":651},[627,1252,881],{"class":647},[627,1254,1255],{"class":651},")) ",[627,1257,1258],{"class":633},"\u002F\u002F Hono \u002F Express \u002F Elysia\n",[627,1260,1261,1264],{"class":629,"line":805},[627,1262,1263],{"class":633},"\u002F\u002F await app.register(evlog, { drain })",[627,1265,1266],{"class":633}," \u002F\u002F Fastify\n",[627,1268,1269,1272],{"class":629,"line":840},[627,1270,1271],{"class":633},"\u002F\u002F EvlogModule.forRoot({ drain })",[627,1273,1274],{"class":633}," \u002F\u002F NestJS\n",[627,1276,1277],{"class":629,"line":878},[627,1278,717],{"emptyLinePlaceholder":716},[627,1280,1281],{"class":629,"line":1081},[627,1282,1283],{"class":633},"\u002F\u002F Flush on shutdown\n",[627,1285,1286,1289,1291,1294,1296,1298,1301,1303,1305,1307,1309,1311,1313,1315],{"class":629,"line":1088},[627,1287,1288],{"class":651},"process",[627,1290,811],{"class":647},[627,1292,1293],{"class":729},"on",[627,1295,733],{"class":651},[627,1297,824],{"class":647},[627,1299,1300],{"class":664},"SIGTERM",[627,1302,824],{"class":647},[627,1304,832],{"class":647},[627,1306,864],{"class":647},[627,1308,746],{"class":745},[627,1310,785],{"class":651},[627,1312,811],{"class":647},[627,1314,873],{"class":729},[627,1316,797],{"class":651},[616,1318,1320],{"className":618,"code":1319,"filename":271,"language":621,"meta":622,"style":622},"\u002F\u002F index.ts — 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\n\u002F\u002F Flush before exit\nawait drain.flush()\n",[624,1321,1322,1327,1347,1366,1384,1402,1406,1424,1440,1444,1459,1463,1468],{"__ignoreMap":622},[627,1323,1324],{"class":629,"line":630},[627,1325,1326],{"class":633},"\u002F\u002F index.ts — plain TypeScript \u002F Bun \u002F Node script\n",[627,1328,1329,1331,1333,1335,1337,1339,1341,1343,1345],{"class":629,"line":637},[627,1330,641],{"class":640},[627,1332,644],{"class":640},[627,1334,648],{"class":647},[627,1336,652],{"class":651},[627,1338,655],{"class":647},[627,1340,658],{"class":640},[627,1342,661],{"class":647},[627,1344,665],{"class":664},[627,1346,668],{"class":647},[627,1348,1349,1351,1353,1356,1358,1360,1362,1364],{"class":629,"line":671},[627,1350,641],{"class":640},[627,1352,648],{"class":647},[627,1354,1355],{"class":651}," initLogger",[627,1357,655],{"class":647},[627,1359,658],{"class":640},[627,1361,661],{"class":647},[627,1363,665],{"class":664},[627,1365,668],{"class":647},[627,1367,1368,1370,1372,1374,1376,1378,1380,1382],{"class":629,"line":692},[627,1369,641],{"class":640},[627,1371,648],{"class":647},[627,1373,678],{"class":651},[627,1375,655],{"class":647},[627,1377,658],{"class":640},[627,1379,661],{"class":647},[627,1381,687],{"class":664},[627,1383,668],{"class":647},[627,1385,1386,1388,1390,1392,1394,1396,1398,1400],{"class":629,"line":713},[627,1387,641],{"class":640},[627,1389,648],{"class":647},[627,1391,699],{"class":651},[627,1393,655],{"class":647},[627,1395,658],{"class":640},[627,1397,661],{"class":647},[627,1399,708],{"class":664},[627,1401,668],{"class":647},[627,1403,1404],{"class":629,"line":720},[627,1405,717],{"emptyLinePlaceholder":716},[627,1407,1408,1410,1412,1414,1416,1418,1420,1422],{"class":629,"line":752},[627,1409,978],{"class":745},[627,1411,981],{"class":651},[627,1413,984],{"class":647},[627,1415,678],{"class":729},[627,1417,766],{"class":647},[627,1419,770],{"class":769},[627,1421,773],{"class":647},[627,1423,777],{"class":651},[627,1425,1426,1428,1430,1432,1434,1436,1438],{"class":629,"line":780},[627,1427,978],{"class":745},[627,1429,1001],{"class":651},[627,1431,984],{"class":647},[627,1433,758],{"class":729},[627,1435,733],{"class":651},[627,1437,794],{"class":729},[627,1439,797],{"class":651},[627,1441,1442],{"class":629,"line":800},[627,1443,717],{"emptyLinePlaceholder":716},[627,1445,1446,1449,1451,1453,1455,1457],{"class":629,"line":805},[627,1447,1448],{"class":729},"initLogger",[627,1450,733],{"class":651},[627,1452,1248],{"class":647},[627,1454,1001],{"class":651},[627,1456,881],{"class":647},[627,1458,837],{"class":651},[627,1460,1461],{"class":629,"line":840},[627,1462,717],{"emptyLinePlaceholder":716},[627,1464,1465],{"class":629,"line":878},[627,1466,1467],{"class":633},"\u002F\u002F Flush before exit\n",[627,1469,1470,1473,1475,1477,1479],{"class":629,"line":1081},[627,1471,1472],{"class":640},"await",[627,1474,785],{"class":651},[627,1476,811],{"class":647},[627,1478,873],{"class":729},[627,1480,777],{"class":651},[1482,1483,1486,1487,1490,1491,1493,1494,1497,1498,811],"callout",{"color":1484,"icon":1485},"warning","i-lucide-alert-triangle","Always flush the pipeline before the process exits (",[624,1488,1489],{},"drain.flush()","). On Nitro use the ",[624,1492,857],{}," hook; on standalone scripts call it before ",[624,1495,1496],{},"process.exit","; on serverless runtimes use ",[624,1499,1500],{},"waitUntil(drain.flush())",[606,1502,1504],{"id":1503},"how-it-works","How It Works",[1506,1507],"drain-pipeline-batching",{},[554,1509,1510,1511,1513,1514,1517,1518,1521,1522,1525,1526,1529,1530,1533],{},"Events are buffered as they arrive on ",[624,1512,827],{},". A batch flushes when either ",[624,1515,1516],{},"batch.size"," is reached or ",[624,1519,1520],{},"batch.intervalMs"," expires (whichever comes first). On failure, the same batch is retried with the configured backoff; once ",[624,1523,1524],{},"retry.maxAttempts"," is exhausted, ",[624,1527,1528],{},"onDropped"," is called with the lost events. The buffer is bounded by ",[624,1531,1532],{},"maxBufferSize"," — once full, the oldest events are dropped to keep memory flat.",[606,1535,170],{"id":1536},"configuration",[554,1538,1539,1540,1543,1544,811],{},"The options below apply to any framework — wire the resulting ",[624,1541,1542],{},"drain"," the same way you did in ",[595,1545,20],{"href":1546},"#quick-start",[616,1548,1551],{"className":618,"code":1549,"filename":1550,"language":621,"meta":622,"style":622},"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\u002F\u002F Then wire `drain` to your framework — see Quick Start above.\n","pipeline-config.ts",[624,1552,1553,1573,1591,1609,1613,1633,1642,1658,1673,1678,1687,1699,1715,1727,1739,1743,1754,1779,1827,1832,1839,1844,1863],{"__ignoreMap":622},[627,1554,1555,1557,1559,1561,1563,1565,1567,1569,1571],{"class":629,"line":630},[627,1556,641],{"class":640},[627,1558,644],{"class":640},[627,1560,648],{"class":647},[627,1562,652],{"class":651},[627,1564,655],{"class":647},[627,1566,658],{"class":640},[627,1568,661],{"class":647},[627,1570,665],{"class":664},[627,1572,668],{"class":647},[627,1574,1575,1577,1579,1581,1583,1585,1587,1589],{"class":629,"line":637},[627,1576,641],{"class":640},[627,1578,648],{"class":647},[627,1580,678],{"class":651},[627,1582,655],{"class":647},[627,1584,658],{"class":640},[627,1586,661],{"class":647},[627,1588,687],{"class":664},[627,1590,668],{"class":647},[627,1592,1593,1595,1597,1599,1601,1603,1605,1607],{"class":629,"line":671},[627,1594,641],{"class":640},[627,1596,648],{"class":647},[627,1598,699],{"class":651},[627,1600,655],{"class":647},[627,1602,658],{"class":640},[627,1604,661],{"class":647},[627,1606,708],{"class":664},[627,1608,668],{"class":647},[627,1610,1611],{"class":629,"line":692},[627,1612,717],{"emptyLinePlaceholder":716},[627,1614,1615,1617,1619,1621,1623,1625,1627,1629,1631],{"class":629,"line":713},[627,1616,978],{"class":745},[627,1618,981],{"class":651},[627,1620,984],{"class":647},[627,1622,678],{"class":729},[627,1624,766],{"class":647},[627,1626,770],{"class":769},[627,1628,773],{"class":647},[627,1630,733],{"class":651},[627,1632,1053],{"class":647},[627,1634,1635,1638,1640],{"class":629,"line":720},[627,1636,1637],{"class":776},"  batch",[627,1639,1061],{"class":647},[627,1641,749],{"class":647},[627,1643,1644,1647,1649,1653,1655],{"class":629,"line":752},[627,1645,1646],{"class":776},"    size",[627,1648,1061],{"class":647},[627,1650,1652],{"class":1651},"sbssI"," 50",[627,1654,832],{"class":647},[627,1656,1657],{"class":633},"          \u002F\u002F Flush every 50 events\n",[627,1659,1660,1663,1665,1668,1670],{"class":629,"line":780},[627,1661,1662],{"class":776},"    intervalMs",[627,1664,1061],{"class":647},[627,1666,1667],{"class":1651}," 5000",[627,1669,832],{"class":647},[627,1671,1672],{"class":633},"  \u002F\u002F Or every 5 seconds, whichever comes first\n",[627,1674,1675],{"class":629,"line":800},[627,1676,1677],{"class":647},"  },\n",[627,1679,1680,1683,1685],{"class":629,"line":805},[627,1681,1682],{"class":776},"  retry",[627,1684,1061],{"class":647},[627,1686,749],{"class":647},[627,1688,1689,1692,1694,1697],{"class":629,"line":840},[627,1690,1691],{"class":776},"    maxAttempts",[627,1693,1061],{"class":647},[627,1695,1696],{"class":1651}," 3",[627,1698,1071],{"class":647},[627,1700,1701,1704,1706,1708,1711,1713],{"class":629,"line":878},[627,1702,1703],{"class":776},"    backoff",[627,1705,1061],{"class":647},[627,1707,661],{"class":647},[627,1709,1710],{"class":664},"exponential",[627,1712,824],{"class":647},[627,1714,1071],{"class":647},[627,1716,1717,1720,1722,1725],{"class":629,"line":1081},[627,1718,1719],{"class":776},"    initialDelayMs",[627,1721,1061],{"class":647},[627,1723,1724],{"class":1651}," 1000",[627,1726,1071],{"class":647},[627,1728,1729,1732,1734,1737],{"class":629,"line":1088},[627,1730,1731],{"class":776},"    maxDelayMs",[627,1733,1061],{"class":647},[627,1735,1736],{"class":1651}," 30000",[627,1738,1071],{"class":647},[627,1740,1741],{"class":629,"line":1093},[627,1742,1677],{"class":647},[627,1744,1745,1748,1750,1752],{"class":629,"line":1099},[627,1746,1747],{"class":776},"  maxBufferSize",[627,1749,1061],{"class":647},[627,1751,1724],{"class":1651},[627,1753,1071],{"class":647},[627,1755,1757,1760,1762,1765,1768,1770,1773,1775,1777],{"class":629,"line":1756},17,[627,1758,1759],{"class":729},"  onDropped",[627,1761,1061],{"class":647},[627,1763,1764],{"class":647}," (",[627,1766,1767],{"class":738},"events",[627,1769,832],{"class":647},[627,1771,1772],{"class":738}," error",[627,1774,742],{"class":647},[627,1776,746],{"class":745},[627,1778,749],{"class":647},[627,1780,1782,1785,1787,1790,1792,1795,1798,1801,1803,1805,1808,1810,1813,1815,1817,1819,1822,1825],{"class":629,"line":1781},18,[627,1783,1784],{"class":651},"    console",[627,1786,811],{"class":647},[627,1788,1789],{"class":729},"error",[627,1791,733],{"class":776},[627,1793,1794],{"class":647},"`",[627,1796,1797],{"class":664},"[evlog] Dropped ",[627,1799,1800],{"class":647},"${",[627,1802,1767],{"class":651},[627,1804,811],{"class":647},[627,1806,1807],{"class":651},"length",[627,1809,881],{"class":647},[627,1811,1812],{"class":664}," events:",[627,1814,1794],{"class":647},[627,1816,832],{"class":647},[627,1818,1772],{"class":651},[627,1820,1821],{"class":647},"?.",[627,1823,1824],{"class":651},"message",[627,1826,837],{"class":776},[627,1828,1830],{"class":629,"line":1829},19,[627,1831,1677],{"class":647},[627,1833,1835,1837],{"class":629,"line":1834},20,[627,1836,881],{"class":647},[627,1838,837],{"class":651},[627,1840,1842],{"class":629,"line":1841},21,[627,1843,717],{"emptyLinePlaceholder":716},[627,1845,1847,1849,1851,1853,1855,1857,1859,1861],{"class":629,"line":1846},22,[627,1848,723],{"class":640},[627,1850,1022],{"class":745},[627,1852,1001],{"class":651},[627,1854,984],{"class":647},[627,1856,758],{"class":729},[627,1858,733],{"class":651},[627,1860,794],{"class":729},[627,1862,797],{"class":651},[627,1864,1866],{"class":629,"line":1865},23,[627,1867,1868],{"class":633},"\u002F\u002F Then wire `drain` to your framework — see Quick Start above.\n",[1870,1871,1873],"h3",{"id":1872},"options-reference","Options Reference",[1875,1876,1877,1893],"table",{},[1878,1879,1880],"thead",{},[1881,1882,1883,1887,1890],"tr",{},[1884,1885,1886],"th",{},"Option",[1884,1888,1889],{},"Default",[1884,1891,1892],{},"Description",[1894,1895,1896,1911,1925,1939,1962,1977,1992,2005],"tbody",{},[1881,1897,1898,1903,1908],{},[1899,1900,1901],"td",{},[624,1902,1516],{},[1899,1904,1905],{},[624,1906,1907],{},"50",[1899,1909,1910],{},"Maximum events per batch",[1881,1912,1913,1917,1922],{},[1899,1914,1915],{},[624,1916,1520],{},[1899,1918,1919],{},[624,1920,1921],{},"5000",[1899,1923,1924],{},"Max time (ms) before flushing a partial batch",[1881,1926,1927,1931,1936],{},[1899,1928,1929],{},[624,1930,1524],{},[1899,1932,1933],{},[624,1934,1935],{},"3",[1899,1937,1938],{},"Total attempts including the initial one",[1881,1940,1941,1946,1951],{},[1899,1942,1943],{},[624,1944,1945],{},"retry.backoff",[1899,1947,1948],{},[624,1949,1950],{},"'exponential'",[1899,1952,1953,1955,1956,1955,1959],{},[624,1954,1950],{}," | ",[624,1957,1958],{},"'linear'",[624,1960,1961],{},"'fixed'",[1881,1963,1964,1969,1974],{},[1899,1965,1966],{},[624,1967,1968],{},"retry.initialDelayMs",[1899,1970,1971],{},[624,1972,1973],{},"1000",[1899,1975,1976],{},"Base delay for the first retry",[1881,1978,1979,1984,1989],{},[1899,1980,1981],{},[624,1982,1983],{},"retry.maxDelayMs",[1899,1985,1986],{},[624,1987,1988],{},"30000",[1899,1990,1991],{},"Upper bound for any retry delay",[1881,1993,1994,1998,2002],{},[1899,1995,1996],{},[624,1997,1532],{},[1899,1999,2000],{},[624,2001,1973],{},[1899,2003,2004],{},"Max buffered events before dropping oldest",[1881,2006,2007,2011,2014],{},[1899,2008,2009],{},[624,2010,1528],{},[1899,2012,2013],{},"-",[1899,2015,2016],{},"Callback when events are dropped (overflow or retry exhaustion)",[606,2018,2020],{"id":2019},"backoff-strategies","Backoff Strategies",[1875,2022,2023,2036],{},[1878,2024,2025],{},[1881,2026,2027,2030,2033],{},[1884,2028,2029],{},"Strategy",[1884,2031,2032],{},"Delay Pattern",[1884,2034,2035],{},"Use Case",[1894,2037,2038,2050,2063],{},[1881,2039,2040,2044,2047],{},[1899,2041,2042],{},[624,2043,1710],{},[1899,2045,2046],{},"1s, 2s, 4s, 8s...",[1899,2048,2049],{},"Default. Best for transient failures that may need time to recover",[1881,2051,2052,2057,2060],{},[1899,2053,2054],{},[624,2055,2056],{},"linear",[1899,2058,2059],{},"1s, 2s, 3s, 4s...",[1899,2061,2062],{},"Predictable delay growth",[1881,2064,2065,2070,2073],{},[1899,2066,2067],{},[624,2068,2069],{},"fixed",[1899,2071,2072],{},"1s, 1s, 1s, 1s...",[1899,2074,2075],{},"Same delay every time. Useful for rate-limited APIs",[606,2077,2079],{"id":2078},"returned-drain-function","Returned Drain Function",[554,2081,2082,2083,2086],{},"The function returned by ",[624,2084,2085],{},"pipeline(drain)"," is hook-compatible and exposes:",[1875,2088,2089,2101],{},[1878,2090,2091],{},[1881,2092,2093,2096,2099],{},[1884,2094,2095],{},"Property",[1884,2097,2098],{},"Type",[1884,2100,1892],{},[1894,2102,2103,2118,2132],{},[1881,2104,2105,2110,2115],{},[1899,2106,2107],{},[624,2108,2109],{},"drain(ctx)",[1899,2111,2112],{},[624,2113,2114],{},"(ctx: T) => void",[1899,2116,2117],{},"Push a single event into the buffer",[1881,2119,2120,2124,2129],{},[1899,2121,2122],{},[624,2123,1489],{},[1899,2125,2126],{},[624,2127,2128],{},"() => Promise\u003Cvoid>",[1899,2130,2131],{},"Force-flush all buffered events",[1881,2133,2134,2139,2144],{},[1899,2135,2136],{},[624,2137,2138],{},"drain.pending",[1899,2140,2141],{},[624,2142,2143],{},"number",[1899,2145,2146],{},"Number of events currently buffered",[606,2148,2150],{"id":2149},"multiple-destinations","Multiple Destinations",[554,2152,2153],{},"Wrap multiple adapters with a single pipeline (one batch flushed in parallel to every destination):",[616,2155,2158],{"className":618,"code":2156,"filename":2157,"language":621,"meta":622,"style":622},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nconst axiom = createAxiomDrain()\nconst otlp = createOTLPDrain()\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nexport const drain = pipeline(async (batch) => {\n  await Promise.allSettled([axiom(batch), otlp(batch)])\n})\n\u002F\u002F Wire `drain` exactly like in Quick Start — Nitro hook, framework middleware, or initLogger.\n","pipeline-fan-out.ts",[624,2159,2160,2180,2198,2216,2236,2240,2253,2266,2270,2288,2316,2353,2359],{"__ignoreMap":622},[627,2161,2162,2164,2166,2168,2170,2172,2174,2176,2178],{"class":629,"line":630},[627,2163,641],{"class":640},[627,2165,644],{"class":640},[627,2167,648],{"class":647},[627,2169,652],{"class":651},[627,2171,655],{"class":647},[627,2173,658],{"class":640},[627,2175,661],{"class":647},[627,2177,665],{"class":664},[627,2179,668],{"class":647},[627,2181,2182,2184,2186,2188,2190,2192,2194,2196],{"class":629,"line":637},[627,2183,641],{"class":640},[627,2185,648],{"class":647},[627,2187,678],{"class":651},[627,2189,655],{"class":647},[627,2191,658],{"class":640},[627,2193,661],{"class":647},[627,2195,687],{"class":664},[627,2197,668],{"class":647},[627,2199,2200,2202,2204,2206,2208,2210,2212,2214],{"class":629,"line":671},[627,2201,641],{"class":640},[627,2203,648],{"class":647},[627,2205,699],{"class":651},[627,2207,655],{"class":647},[627,2209,658],{"class":640},[627,2211,661],{"class":647},[627,2213,708],{"class":664},[627,2215,668],{"class":647},[627,2217,2218,2220,2222,2225,2227,2229,2231,2234],{"class":629,"line":692},[627,2219,641],{"class":640},[627,2221,648],{"class":647},[627,2223,2224],{"class":651}," createOTLPDrain",[627,2226,655],{"class":647},[627,2228,658],{"class":640},[627,2230,661],{"class":647},[627,2232,2233],{"class":664},"evlog\u002Fotlp",[627,2235,668],{"class":647},[627,2237,2238],{"class":629,"line":713},[627,2239,717],{"emptyLinePlaceholder":716},[627,2241,2242,2244,2247,2249,2251],{"class":629,"line":720},[627,2243,978],{"class":745},[627,2245,2246],{"class":651}," axiom ",[627,2248,984],{"class":647},[627,2250,699],{"class":729},[627,2252,777],{"class":651},[627,2254,2255,2257,2260,2262,2264],{"class":629,"line":752},[627,2256,978],{"class":745},[627,2258,2259],{"class":651}," otlp ",[627,2261,984],{"class":647},[627,2263,2224],{"class":729},[627,2265,777],{"class":651},[627,2267,2268],{"class":629,"line":780},[627,2269,717],{"emptyLinePlaceholder":716},[627,2271,2272,2274,2276,2278,2280,2282,2284,2286],{"class":629,"line":800},[627,2273,978],{"class":745},[627,2275,981],{"class":651},[627,2277,984],{"class":647},[627,2279,678],{"class":729},[627,2281,766],{"class":647},[627,2283,770],{"class":769},[627,2285,773],{"class":647},[627,2287,777],{"class":651},[627,2289,2290,2292,2294,2296,2298,2300,2302,2305,2307,2310,2312,2314],{"class":629,"line":805},[627,2291,723],{"class":640},[627,2293,1022],{"class":745},[627,2295,1001],{"class":651},[627,2297,984],{"class":647},[627,2299,758],{"class":729},[627,2301,733],{"class":651},[627,2303,2304],{"class":745},"async",[627,2306,1764],{"class":647},[627,2308,2309],{"class":738},"batch",[627,2311,742],{"class":647},[627,2313,746],{"class":745},[627,2315,749],{"class":647},[627,2317,2318,2321,2324,2326,2329,2332,2335,2337,2339,2341,2343,2346,2348,2350],{"class":629,"line":840},[627,2319,2320],{"class":640},"  await",[627,2322,2323],{"class":769}," Promise",[627,2325,811],{"class":647},[627,2327,2328],{"class":729},"allSettled",[627,2330,2331],{"class":776},"([",[627,2333,2334],{"class":729},"axiom",[627,2336,733],{"class":776},[627,2338,2309],{"class":651},[627,2340,742],{"class":776},[627,2342,832],{"class":647},[627,2344,2345],{"class":729}," otlp",[627,2347,733],{"class":776},[627,2349,2309],{"class":651},[627,2351,2352],{"class":776},")])\n",[627,2354,2355,2357],{"class":629,"line":878},[627,2356,881],{"class":647},[627,2358,837],{"class":651},[627,2360,2361],{"class":629,"line":1081},[627,2362,2363],{"class":633},"\u002F\u002F Wire `drain` exactly like in Quick Start — Nitro hook, framework middleware, or initLogger.\n",[606,2365,2367],{"id":2366},"custom-drain-function","Custom Drain Function",[554,2369,2370],{},"You don't need an adapter. Pass any async function that accepts a batch:",[616,2372,2375],{"className":618,"code":2373,"filename":2374,"language":621,"meta":622,"style":622},"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\u002F\u002F Wire `drain` to your framework — see Quick Start above.\n","pipeline-custom.ts",[624,2376,2377,2397,2415,2419,2460,2464,2490,2510,2526,2554,2598,2605,2611],{"__ignoreMap":622},[627,2378,2379,2381,2383,2385,2387,2389,2391,2393,2395],{"class":629,"line":630},[627,2380,641],{"class":640},[627,2382,644],{"class":640},[627,2384,648],{"class":647},[627,2386,652],{"class":651},[627,2388,655],{"class":647},[627,2390,658],{"class":640},[627,2392,661],{"class":647},[627,2394,665],{"class":664},[627,2396,668],{"class":647},[627,2398,2399,2401,2403,2405,2407,2409,2411,2413],{"class":629,"line":637},[627,2400,641],{"class":640},[627,2402,648],{"class":647},[627,2404,678],{"class":651},[627,2406,655],{"class":647},[627,2408,658],{"class":640},[627,2410,661],{"class":647},[627,2412,687],{"class":664},[627,2414,668],{"class":647},[627,2416,2417],{"class":629,"line":671},[627,2418,717],{"emptyLinePlaceholder":716},[627,2420,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2442,2444,2446,2449,2451,2454,2456,2458],{"class":629,"line":692},[627,2422,978],{"class":745},[627,2424,981],{"class":651},[627,2426,984],{"class":647},[627,2428,678],{"class":729},[627,2430,766],{"class":647},[627,2432,770],{"class":769},[627,2434,773],{"class":647},[627,2436,733],{"class":651},[627,2438,1248],{"class":647},[627,2440,2441],{"class":776}," batch",[627,2443,1061],{"class":647},[627,2445,648],{"class":647},[627,2447,2448],{"class":776}," size",[627,2450,1061],{"class":647},[627,2452,2453],{"class":1651}," 100",[627,2455,655],{"class":647},[627,2457,655],{"class":647},[627,2459,837],{"class":651},[627,2461,2462],{"class":629,"line":713},[627,2463,717],{"emptyLinePlaceholder":716},[627,2465,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488],{"class":629,"line":720},[627,2467,723],{"class":640},[627,2469,1022],{"class":745},[627,2471,1001],{"class":651},[627,2473,984],{"class":647},[627,2475,758],{"class":729},[627,2477,733],{"class":651},[627,2479,2304],{"class":745},[627,2481,1764],{"class":647},[627,2483,2309],{"class":738},[627,2485,742],{"class":647},[627,2487,746],{"class":745},[627,2489,749],{"class":647},[627,2491,2492,2494,2497,2499,2501,2504,2506,2508],{"class":629,"line":752},[627,2493,2320],{"class":640},[627,2495,2496],{"class":729}," fetch",[627,2498,733],{"class":776},[627,2500,824],{"class":647},[627,2502,2503],{"class":664},"https:\u002F\u002Fyour-service.com\u002Flogs",[627,2505,824],{"class":647},[627,2507,832],{"class":647},[627,2509,749],{"class":647},[627,2511,2512,2515,2517,2519,2522,2524],{"class":629,"line":780},[627,2513,2514],{"class":776},"    method",[627,2516,1061],{"class":647},[627,2518,661],{"class":647},[627,2520,2521],{"class":664},"POST",[627,2523,824],{"class":647},[627,2525,1071],{"class":647},[627,2527,2528,2531,2533,2535,2537,2540,2542,2544,2546,2549,2551],{"class":629,"line":800},[627,2529,2530],{"class":776},"    headers",[627,2532,1061],{"class":647},[627,2534,648],{"class":647},[627,2536,661],{"class":647},[627,2538,2539],{"class":776},"Content-Type",[627,2541,824],{"class":647},[627,2543,1061],{"class":647},[627,2545,661],{"class":647},[627,2547,2548],{"class":664},"application\u002Fjson",[627,2550,824],{"class":647},[627,2552,2553],{"class":647}," },\n",[627,2555,2556,2559,2561,2564,2566,2569,2571,2573,2575,2578,2580,2583,2585,2588,2590,2593,2596],{"class":629,"line":805},[627,2557,2558],{"class":776},"    body",[627,2560,1061],{"class":647},[627,2562,2563],{"class":651}," JSON",[627,2565,811],{"class":647},[627,2567,2568],{"class":729},"stringify",[627,2570,733],{"class":776},[627,2572,2309],{"class":651},[627,2574,811],{"class":647},[627,2576,2577],{"class":729},"map",[627,2579,733],{"class":776},[627,2581,2582],{"class":738},"ctx",[627,2584,746],{"class":745},[627,2586,2587],{"class":651}," ctx",[627,2589,811],{"class":647},[627,2591,2592],{"class":651},"event",[627,2594,2595],{"class":776},"))",[627,2597,1071],{"class":647},[627,2599,2600,2603],{"class":629,"line":840},[627,2601,2602],{"class":647},"  }",[627,2604,837],{"class":776},[627,2606,2607,2609],{"class":629,"line":878},[627,2608,881],{"class":647},[627,2610,837],{"class":651},[627,2612,2613],{"class":629,"line":1081},[627,2614,2615],{"class":633},"\u002F\u002F Wire `drain` to your framework — see Quick Start above.\n",[1482,2617,2620,2621,2626,2627,2630],{"color":2618,"icon":2619},"neutral","i-lucide-arrow-right","See the full ",[595,2622,2625],{"href":2623,"rel":2624},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[599],"bun-script example"," for a complete working script using the standalone wiring, and the ",[595,2628,2629],{"href":217},"Next.js guide"," for an App Router implementation.",[606,2632,2634],{"id":2633},"next-steps","Next Steps",[566,2636,2637,2643,2648],{},[569,2638,2639,2642],{},[595,2640,2641],{"href":452},"Adapters Overview"," - Available built-in adapters",[569,2644,2645,2647],{},[595,2646,523],{"href":524}," - Build your own drain function",[569,2649,2650,2652],{},[595,2651,185],{"href":186}," - Security and production tips",[2654,2655,2656],"style",{},"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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":622,"searchDepth":637,"depth":637,"links":2658},[2659,2660,2661,2664,2665,2666,2667,2668],{"id":608,"depth":637,"text":20},{"id":1503,"depth":637,"text":1504},{"id":1536,"depth":637,"text":170,"children":2662},[2663],{"id":1872,"depth":671,"text":1873},{"id":2019,"depth":637,"text":2020},{"id":2078,"depth":637,"text":2079},{"id":2149,"depth":637,"text":2150},{"id":2366,"depth":637,"text":2367},{"id":2633,"depth":637,"text":2634},"Batch events, retry on failure, and protect against buffer overflow with the shared drain pipeline. Supports fan-out to multiple adapters.","md",[2672,2675],{"label":2641,"icon":2673,"to":452,"color":2618,"variant":2674},"i-custom-plug","subtle",{"label":523,"icon":83,"to":524,"color":2618,"variant":2674},{},{"title":326,"icon":333},{"title":549,"description":2669},"gG46N0uOrC2VufBknI9D8R-To3R9xfm6lzdjyKVm_6c",[2681,2683],{"title":505,"path":506,"stem":507,"description":2682,"icon":508,"children":-1},"Self-hosted log retention for evlog using NuxtHub database storage. Store, query, and automatically clean up your structured logs with zero external dependencies.",{"title":518,"path":519,"stem":520,"description":2684,"icon":521,"children":-1},"Framework-agnostic HTTP log transport for sending client-side logs to your server via fetch or sendBeacon. Works in the browser or any environment with fetch. Use the `evlog\u002Fhttp` entry point.",1778338245392]