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