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