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