[{"data":1,"prerenderedAt":3165},["ShallowReactive",2],{"navigation_docs":3,"-adapters-custom":166,"-adapters-custom-surround":3160},[4,30,55,105,122,136],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45,50],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"icon":54},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields","i-simple-icons-typescript",{"title":56,"path":57,"stem":58,"children":59,"page":29},"Adapters","/adapters","3.adapters",[60,65,70,75,80,85,90,95,100],{"title":61,"path":62,"stem":63,"icon":64},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":66,"path":67,"stem":68,"icon":69},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":71,"path":72,"stem":73,"icon":74},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":76,"path":77,"stem":78,"icon":79},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":81,"path":82,"stem":83,"icon":84},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":86,"path":87,"stem":88,"icon":89},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":91,"path":92,"stem":93,"icon":94},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":96,"path":97,"stem":98,"icon":99},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":101,"path":102,"stem":103,"icon":104},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Enrichers","/enrichers","4.enrichers",[110,113,118],{"title":61,"path":111,"stem":112,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":114,"path":115,"stem":116,"icon":117},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":119,"path":120,"stem":121,"icon":94},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":123,"path":124,"stem":125,"children":126,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[127,131],{"title":61,"path":128,"stem":129,"icon":130},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":132,"path":133,"stem":134,"icon":135},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":137,"path":138,"stem":139,"children":140,"page":29},"Examples","/examples","6.examples",[141,146,151,156,161],{"title":142,"path":143,"stem":144,"icon":145},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":147,"path":148,"stem":149,"icon":150},"TanStack Start","/examples/tanstack-start","6.examples/2.tanstack-start","i-custom-tanstack",{"title":152,"path":153,"stem":154,"icon":155},"Hono","/examples/hono","6.examples/3.hono","i-simple-icons-hono",{"title":157,"path":158,"stem":159,"icon":160},"Express","/examples/express","6.examples/4.express","i-simple-icons-express",{"title":162,"path":163,"stem":164,"icon":165},"Elysia","/examples/elysia","6.examples/5.elysia","i-custom-elysia",{"id":167,"title":91,"body":168,"description":3149,"extension":3150,"links":3151,"meta":3156,"navigation":3157,"path":92,"seo":3158,"stem":93,"__hash__":3159},"docs/3.adapters/7.custom.md",{"type":169,"value":170,"toc":3138},"minimark",[171,180,185,431,435,719,723,726,1333,1461,1465,1468,1823,1827,1830,2034,2038,2041,2428,2432,2440,2753,2762,2766,2799,3104,3108,3134],[172,173,174,175,179],"p",{},"You can create custom adapters to send logs to any service or destination. An adapter is simply a function that receives a ",[176,177,178],"code",{},"DrainContext"," and sends the data somewhere.",[181,182,184],"h2",{"id":183},"basic-structure","Basic Structure",[186,187,193],"pre",{"className":188,"code":189,"filename":190,"language":191,"meta":192,"style":192},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    // ctx.event contains the full wide event\n    // ctx.request contains request metadata\n    // ctx.headers contains safe HTTP headers\n\n    await fetch('https://your-service.com/logs', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(ctx.event),\n    })\n  })\n})\n","server/plugins/evlog-drain.ts","typescript","",[176,194,195,232,279,286,292,298,305,327,347,377,406,415,423],{"__ignoreMap":192},[196,197,200,204,207,211,215,218,222,225,229],"span",{"class":198,"line":199},"line",1,[196,201,203],{"class":202},"s7zQu","export",[196,205,206],{"class":202}," default",[196,208,210],{"class":209},"s2Zo4"," defineNitroPlugin",[196,212,214],{"class":213},"sTEyZ","(",[196,216,214],{"class":217},"sMK4o",[196,219,221],{"class":220},"sHdIc","nitroApp",[196,223,224],{"class":217},")",[196,226,228],{"class":227},"spNyl"," =>",[196,230,231],{"class":217}," {\n",[196,233,235,238,241,244,246,249,252,255,259,261,264,267,270,273,275,277],{"class":198,"line":234},2,[196,236,237],{"class":213},"  nitroApp",[196,239,240],{"class":217},".",[196,242,243],{"class":213},"hooks",[196,245,240],{"class":217},[196,247,248],{"class":209},"hook",[196,250,214],{"class":251},"swJcz",[196,253,254],{"class":217},"'",[196,256,258],{"class":257},"sfazB","evlog:drain",[196,260,254],{"class":217},[196,262,263],{"class":217},",",[196,265,266],{"class":227}," async",[196,268,269],{"class":217}," (",[196,271,272],{"class":220},"ctx",[196,274,224],{"class":217},[196,276,228],{"class":227},[196,278,231],{"class":217},[196,280,282],{"class":198,"line":281},3,[196,283,285],{"class":284},"sHwdD","    // ctx.event contains the full wide event\n",[196,287,289],{"class":198,"line":288},4,[196,290,291],{"class":284},"    // ctx.request contains request metadata\n",[196,293,295],{"class":198,"line":294},5,[196,296,297],{"class":284},"    // ctx.headers contains safe HTTP headers\n",[196,299,301],{"class":198,"line":300},6,[196,302,304],{"emptyLinePlaceholder":303},true,"\n",[196,306,308,311,314,316,318,321,323,325],{"class":198,"line":307},7,[196,309,310],{"class":202},"    await",[196,312,313],{"class":209}," fetch",[196,315,214],{"class":251},[196,317,254],{"class":217},[196,319,320],{"class":257},"https://your-service.com/logs",[196,322,254],{"class":217},[196,324,263],{"class":217},[196,326,231],{"class":217},[196,328,330,333,336,339,342,344],{"class":198,"line":329},8,[196,331,332],{"class":251},"      method",[196,334,335],{"class":217},":",[196,337,338],{"class":217}," '",[196,340,341],{"class":257},"POST",[196,343,254],{"class":217},[196,345,346],{"class":217},",\n",[196,348,350,353,355,358,360,363,365,367,369,372,374],{"class":198,"line":349},9,[196,351,352],{"class":251},"      headers",[196,354,335],{"class":217},[196,356,357],{"class":217}," {",[196,359,338],{"class":217},[196,361,362],{"class":251},"Content-Type",[196,364,254],{"class":217},[196,366,335],{"class":217},[196,368,338],{"class":217},[196,370,371],{"class":257},"application/json",[196,373,254],{"class":217},[196,375,376],{"class":217}," },\n",[196,378,380,383,385,388,390,393,395,397,399,402,404],{"class":198,"line":379},10,[196,381,382],{"class":251},"      body",[196,384,335],{"class":217},[196,386,387],{"class":213}," JSON",[196,389,240],{"class":217},[196,391,392],{"class":209},"stringify",[196,394,214],{"class":251},[196,396,272],{"class":213},[196,398,240],{"class":217},[196,400,401],{"class":213},"event",[196,403,224],{"class":251},[196,405,346],{"class":217},[196,407,409,412],{"class":198,"line":408},11,[196,410,411],{"class":217},"    }",[196,413,414],{"class":251},")\n",[196,416,418,421],{"class":198,"line":417},12,[196,419,420],{"class":217},"  }",[196,422,414],{"class":251},[196,424,426,429],{"class":198,"line":425},13,[196,427,428],{"class":217},"}",[196,430,414],{"class":213},[181,432,434],{"id":433},"draincontext-reference","DrainContext Reference",[186,436,439],{"className":188,"code":437,"filename":438,"language":191,"meta":192,"style":192},"interface DrainContext {\n  /** The complete wide event with all accumulated context */\n  event: WideEvent\n\n  /** Request metadata */\n  request?: {\n    method: string\n    path: string\n    requestId: string\n  }\n\n  /** Safe HTTP headers (sensitive headers filtered) */\n  headers?: Record\u003Cstring, string>\n}\n\ninterface WideEvent {\n  timestamp: string\n  level: 'debug' | 'info' | 'warn' | 'error'\n  service: string\n  environment?: string\n  version?: string\n  region?: string\n  commitHash?: string\n  requestId?: string\n  // ... plus all fields added via log.set()\n  [key: string]: unknown\n}\n","types.ts",[176,440,441,452,457,467,471,476,486,496,505,514,519,523,528,552,558,563,573,583,627,637,647,657,667,677,687,693,714],{"__ignoreMap":192},[196,442,443,446,450],{"class":198,"line":199},[196,444,445],{"class":227},"interface",[196,447,449],{"class":448},"sBMFI"," DrainContext",[196,451,231],{"class":217},[196,453,454],{"class":198,"line":234},[196,455,456],{"class":284},"  /** The complete wide event with all accumulated context */\n",[196,458,459,462,464],{"class":198,"line":281},[196,460,461],{"class":251},"  event",[196,463,335],{"class":217},[196,465,466],{"class":448}," WideEvent\n",[196,468,469],{"class":198,"line":288},[196,470,304],{"emptyLinePlaceholder":303},[196,472,473],{"class":198,"line":294},[196,474,475],{"class":284},"  /** Request metadata */\n",[196,477,478,481,484],{"class":198,"line":300},[196,479,480],{"class":251},"  request",[196,482,483],{"class":217},"?:",[196,485,231],{"class":217},[196,487,488,491,493],{"class":198,"line":307},[196,489,490],{"class":251},"    method",[196,492,335],{"class":217},[196,494,495],{"class":448}," string\n",[196,497,498,501,503],{"class":198,"line":329},[196,499,500],{"class":251},"    path",[196,502,335],{"class":217},[196,504,495],{"class":448},[196,506,507,510,512],{"class":198,"line":349},[196,508,509],{"class":251},"    requestId",[196,511,335],{"class":217},[196,513,495],{"class":448},[196,515,516],{"class":198,"line":379},[196,517,518],{"class":217},"  }\n",[196,520,521],{"class":198,"line":408},[196,522,304],{"emptyLinePlaceholder":303},[196,524,525],{"class":198,"line":417},[196,526,527],{"class":284},"  /** Safe HTTP headers (sensitive headers filtered) */\n",[196,529,530,533,535,538,541,544,546,549],{"class":198,"line":425},[196,531,532],{"class":251},"  headers",[196,534,483],{"class":217},[196,536,537],{"class":448}," Record",[196,539,540],{"class":217},"\u003C",[196,542,543],{"class":448},"string",[196,545,263],{"class":217},[196,547,548],{"class":448}," string",[196,550,551],{"class":217},">\n",[196,553,555],{"class":198,"line":554},14,[196,556,557],{"class":217},"}\n",[196,559,561],{"class":198,"line":560},15,[196,562,304],{"emptyLinePlaceholder":303},[196,564,566,568,571],{"class":198,"line":565},16,[196,567,445],{"class":227},[196,569,570],{"class":448}," WideEvent",[196,572,231],{"class":217},[196,574,576,579,581],{"class":198,"line":575},17,[196,577,578],{"class":251},"  timestamp",[196,580,335],{"class":217},[196,582,495],{"class":448},[196,584,586,589,591,593,596,598,601,603,606,608,610,612,615,617,619,621,624],{"class":198,"line":585},18,[196,587,588],{"class":251},"  level",[196,590,335],{"class":217},[196,592,338],{"class":217},[196,594,595],{"class":257},"debug",[196,597,254],{"class":217},[196,599,600],{"class":217}," |",[196,602,338],{"class":217},[196,604,605],{"class":257},"info",[196,607,254],{"class":217},[196,609,600],{"class":217},[196,611,338],{"class":217},[196,613,614],{"class":257},"warn",[196,616,254],{"class":217},[196,618,600],{"class":217},[196,620,338],{"class":217},[196,622,623],{"class":257},"error",[196,625,626],{"class":217},"'\n",[196,628,630,633,635],{"class":198,"line":629},19,[196,631,632],{"class":251},"  service",[196,634,335],{"class":217},[196,636,495],{"class":448},[196,638,640,643,645],{"class":198,"line":639},20,[196,641,642],{"class":251},"  environment",[196,644,483],{"class":217},[196,646,495],{"class":448},[196,648,650,653,655],{"class":198,"line":649},21,[196,651,652],{"class":251},"  version",[196,654,483],{"class":217},[196,656,495],{"class":448},[196,658,660,663,665],{"class":198,"line":659},22,[196,661,662],{"class":251},"  region",[196,664,483],{"class":217},[196,666,495],{"class":448},[196,668,670,673,675],{"class":198,"line":669},23,[196,671,672],{"class":251},"  commitHash",[196,674,483],{"class":217},[196,676,495],{"class":448},[196,678,680,683,685],{"class":198,"line":679},24,[196,681,682],{"class":251},"  requestId",[196,684,483],{"class":217},[196,686,495],{"class":448},[196,688,690],{"class":198,"line":689},25,[196,691,692],{"class":284},"  // ... plus all fields added via log.set()\n",[196,694,696,699,702,704,706,709,711],{"class":198,"line":695},26,[196,697,698],{"class":213},"  [",[196,700,701],{"class":220},"key",[196,703,335],{"class":217},[196,705,548],{"class":448},[196,707,708],{"class":213},"]",[196,710,335],{"class":217},[196,712,713],{"class":448}," unknown\n",[196,715,717],{"class":198,"line":716},27,[196,718,557],{"class":217},[181,720,722],{"id":721},"factory-pattern","Factory Pattern",[172,724,725],{},"For reusable adapters, use the factory pattern:",[186,727,730],{"className":188,"code":728,"filename":729,"language":191,"meta":192,"style":192},"import type { DrainContext } from 'evlog'\n\nexport interface MyAdapterConfig {\n  apiKey: string\n  endpoint?: string\n  timeout?: number\n}\n\nexport function createMyAdapter(config: MyAdapterConfig) {\n  const endpoint = config.endpoint ?? 'https://api.myservice.com/ingest'\n  const timeout = config.timeout ?? 5000\n\n  return async (ctx: DrainContext) => {\n    const controller = new AbortController()\n    const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n    try {\n      const response = await fetch(endpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'X-API-Key': config.apiKey,\n        },\n        body: JSON.stringify(ctx.event),\n        signal: controller.signal,\n      })\n\n      if (!response.ok) {\n        console.error(`[my-adapter] Failed: ${response.status}`)\n      }\n    } catch (error) {\n      if (error instanceof Error && error.name === 'AbortError') {\n        console.error('[my-adapter] Request timed out')\n      } else {\n        console.error('[my-adapter] Error:', error)\n      }\n    } finally {\n      clearTimeout(timeoutId)\n    }\n  }\n}\n","lib/my-adapter.ts",[176,731,732,757,761,773,782,791,801,805,809,832,861,883,887,908,927,961,965,972,995,1010,1019,1038,1058,1063,1088,1104,1111,1115,1140,1173,1179,1195,1235,1255,1265,1289,1294,1304,1317,1323,1328],{"__ignoreMap":192},[196,733,734,737,740,742,744,747,750,752,755],{"class":198,"line":199},[196,735,736],{"class":202},"import",[196,738,739],{"class":202}," type",[196,741,357],{"class":217},[196,743,449],{"class":213},[196,745,746],{"class":217}," }",[196,748,749],{"class":202}," from",[196,751,338],{"class":217},[196,753,754],{"class":257},"evlog",[196,756,626],{"class":217},[196,758,759],{"class":198,"line":234},[196,760,304],{"emptyLinePlaceholder":303},[196,762,763,765,768,771],{"class":198,"line":281},[196,764,203],{"class":202},[196,766,767],{"class":227}," interface",[196,769,770],{"class":448}," MyAdapterConfig",[196,772,231],{"class":217},[196,774,775,778,780],{"class":198,"line":288},[196,776,777],{"class":251},"  apiKey",[196,779,335],{"class":217},[196,781,495],{"class":448},[196,783,784,787,789],{"class":198,"line":294},[196,785,786],{"class":251},"  endpoint",[196,788,483],{"class":217},[196,790,495],{"class":448},[196,792,793,796,798],{"class":198,"line":300},[196,794,795],{"class":251},"  timeout",[196,797,483],{"class":217},[196,799,800],{"class":448}," number\n",[196,802,803],{"class":198,"line":307},[196,804,557],{"class":217},[196,806,807],{"class":198,"line":329},[196,808,304],{"emptyLinePlaceholder":303},[196,810,811,813,816,819,821,824,826,828,830],{"class":198,"line":349},[196,812,203],{"class":202},[196,814,815],{"class":227}," function",[196,817,818],{"class":209}," createMyAdapter",[196,820,214],{"class":217},[196,822,823],{"class":220},"config",[196,825,335],{"class":217},[196,827,770],{"class":448},[196,829,224],{"class":217},[196,831,231],{"class":217},[196,833,834,837,840,843,846,848,851,854,856,859],{"class":198,"line":379},[196,835,836],{"class":227},"  const",[196,838,839],{"class":213}," endpoint",[196,841,842],{"class":217}," =",[196,844,845],{"class":213}," config",[196,847,240],{"class":217},[196,849,850],{"class":213},"endpoint",[196,852,853],{"class":217}," ??",[196,855,338],{"class":217},[196,857,858],{"class":257},"https://api.myservice.com/ingest",[196,860,626],{"class":217},[196,862,863,865,868,870,872,874,877,879],{"class":198,"line":408},[196,864,836],{"class":227},[196,866,867],{"class":213}," timeout",[196,869,842],{"class":217},[196,871,845],{"class":213},[196,873,240],{"class":217},[196,875,876],{"class":213},"timeout",[196,878,853],{"class":217},[196,880,882],{"class":881},"sbssI"," 5000\n",[196,884,885],{"class":198,"line":417},[196,886,304],{"emptyLinePlaceholder":303},[196,888,889,892,894,896,898,900,902,904,906],{"class":198,"line":425},[196,890,891],{"class":202},"  return",[196,893,266],{"class":227},[196,895,269],{"class":217},[196,897,272],{"class":220},[196,899,335],{"class":217},[196,901,449],{"class":448},[196,903,224],{"class":217},[196,905,228],{"class":227},[196,907,231],{"class":217},[196,909,910,913,916,918,921,924],{"class":198,"line":554},[196,911,912],{"class":227},"    const",[196,914,915],{"class":213}," controller",[196,917,842],{"class":217},[196,919,920],{"class":217}," new",[196,922,923],{"class":209}," AbortController",[196,925,926],{"class":251},"()\n",[196,928,929,931,934,936,939,941,944,946,948,950,953,955,957,959],{"class":198,"line":560},[196,930,912],{"class":227},[196,932,933],{"class":213}," timeoutId",[196,935,842],{"class":217},[196,937,938],{"class":209}," setTimeout",[196,940,214],{"class":251},[196,942,943],{"class":217},"()",[196,945,228],{"class":227},[196,947,915],{"class":213},[196,949,240],{"class":217},[196,951,952],{"class":209},"abort",[196,954,943],{"class":251},[196,956,263],{"class":217},[196,958,867],{"class":213},[196,960,414],{"class":251},[196,962,963],{"class":198,"line":565},[196,964,304],{"emptyLinePlaceholder":303},[196,966,967,970],{"class":198,"line":575},[196,968,969],{"class":202},"    try",[196,971,231],{"class":217},[196,973,974,977,980,982,985,987,989,991,993],{"class":198,"line":585},[196,975,976],{"class":227},"      const",[196,978,979],{"class":213}," response",[196,981,842],{"class":217},[196,983,984],{"class":202}," await",[196,986,313],{"class":209},[196,988,214],{"class":251},[196,990,850],{"class":213},[196,992,263],{"class":217},[196,994,231],{"class":217},[196,996,997,1000,1002,1004,1006,1008],{"class":198,"line":629},[196,998,999],{"class":251},"        method",[196,1001,335],{"class":217},[196,1003,338],{"class":217},[196,1005,341],{"class":257},[196,1007,254],{"class":217},[196,1009,346],{"class":217},[196,1011,1012,1015,1017],{"class":198,"line":639},[196,1013,1014],{"class":251},"        headers",[196,1016,335],{"class":217},[196,1018,231],{"class":217},[196,1020,1021,1024,1026,1028,1030,1032,1034,1036],{"class":198,"line":649},[196,1022,1023],{"class":217},"          '",[196,1025,362],{"class":251},[196,1027,254],{"class":217},[196,1029,335],{"class":217},[196,1031,338],{"class":217},[196,1033,371],{"class":257},[196,1035,254],{"class":217},[196,1037,346],{"class":217},[196,1039,1040,1042,1045,1047,1049,1051,1053,1056],{"class":198,"line":659},[196,1041,1023],{"class":217},[196,1043,1044],{"class":251},"X-API-Key",[196,1046,254],{"class":217},[196,1048,335],{"class":217},[196,1050,845],{"class":213},[196,1052,240],{"class":217},[196,1054,1055],{"class":213},"apiKey",[196,1057,346],{"class":217},[196,1059,1060],{"class":198,"line":669},[196,1061,1062],{"class":217},"        },\n",[196,1064,1065,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086],{"class":198,"line":679},[196,1066,1067],{"class":251},"        body",[196,1069,335],{"class":217},[196,1071,387],{"class":213},[196,1073,240],{"class":217},[196,1075,392],{"class":209},[196,1077,214],{"class":251},[196,1079,272],{"class":213},[196,1081,240],{"class":217},[196,1083,401],{"class":213},[196,1085,224],{"class":251},[196,1087,346],{"class":217},[196,1089,1090,1093,1095,1097,1099,1102],{"class":198,"line":689},[196,1091,1092],{"class":251},"        signal",[196,1094,335],{"class":217},[196,1096,915],{"class":213},[196,1098,240],{"class":217},[196,1100,1101],{"class":213},"signal",[196,1103,346],{"class":217},[196,1105,1106,1109],{"class":198,"line":695},[196,1107,1108],{"class":217},"      }",[196,1110,414],{"class":251},[196,1112,1113],{"class":198,"line":716},[196,1114,304],{"emptyLinePlaceholder":303},[196,1116,1118,1121,1123,1126,1129,1131,1134,1137],{"class":198,"line":1117},28,[196,1119,1120],{"class":202},"      if",[196,1122,269],{"class":251},[196,1124,1125],{"class":217},"!",[196,1127,1128],{"class":213},"response",[196,1130,240],{"class":217},[196,1132,1133],{"class":213},"ok",[196,1135,1136],{"class":251},") ",[196,1138,1139],{"class":217},"{\n",[196,1141,1143,1146,1148,1150,1152,1155,1158,1161,1163,1165,1168,1171],{"class":198,"line":1142},29,[196,1144,1145],{"class":213},"        console",[196,1147,240],{"class":217},[196,1149,623],{"class":209},[196,1151,214],{"class":251},[196,1153,1154],{"class":217},"`",[196,1156,1157],{"class":257},"[my-adapter] Failed: ",[196,1159,1160],{"class":217},"${",[196,1162,1128],{"class":213},[196,1164,240],{"class":217},[196,1166,1167],{"class":213},"status",[196,1169,1170],{"class":217},"}`",[196,1172,414],{"class":251},[196,1174,1176],{"class":198,"line":1175},30,[196,1177,1178],{"class":217},"      }\n",[196,1180,1182,1184,1187,1189,1191,1193],{"class":198,"line":1181},31,[196,1183,411],{"class":217},[196,1185,1186],{"class":202}," catch",[196,1188,269],{"class":251},[196,1190,623],{"class":213},[196,1192,1136],{"class":251},[196,1194,1139],{"class":217},[196,1196,1198,1200,1202,1204,1207,1210,1213,1216,1218,1221,1224,1226,1229,1231,1233],{"class":198,"line":1197},32,[196,1199,1120],{"class":202},[196,1201,269],{"class":251},[196,1203,623],{"class":213},[196,1205,1206],{"class":217}," instanceof",[196,1208,1209],{"class":448}," Error",[196,1211,1212],{"class":217}," &&",[196,1214,1215],{"class":213}," error",[196,1217,240],{"class":217},[196,1219,1220],{"class":213},"name",[196,1222,1223],{"class":217}," ===",[196,1225,338],{"class":217},[196,1227,1228],{"class":257},"AbortError",[196,1230,254],{"class":217},[196,1232,1136],{"class":251},[196,1234,1139],{"class":217},[196,1236,1238,1240,1242,1244,1246,1248,1251,1253],{"class":198,"line":1237},33,[196,1239,1145],{"class":213},[196,1241,240],{"class":217},[196,1243,623],{"class":209},[196,1245,214],{"class":251},[196,1247,254],{"class":217},[196,1249,1250],{"class":257},"[my-adapter] Request timed out",[196,1252,254],{"class":217},[196,1254,414],{"class":251},[196,1256,1258,1260,1263],{"class":198,"line":1257},34,[196,1259,1108],{"class":217},[196,1261,1262],{"class":202}," else",[196,1264,231],{"class":217},[196,1266,1268,1270,1272,1274,1276,1278,1281,1283,1285,1287],{"class":198,"line":1267},35,[196,1269,1145],{"class":213},[196,1271,240],{"class":217},[196,1273,623],{"class":209},[196,1275,214],{"class":251},[196,1277,254],{"class":217},[196,1279,1280],{"class":257},"[my-adapter] Error:",[196,1282,254],{"class":217},[196,1284,263],{"class":217},[196,1286,1215],{"class":213},[196,1288,414],{"class":251},[196,1290,1292],{"class":198,"line":1291},36,[196,1293,1178],{"class":217},[196,1295,1297,1299,1302],{"class":198,"line":1296},37,[196,1298,411],{"class":217},[196,1300,1301],{"class":202}," finally",[196,1303,231],{"class":217},[196,1305,1307,1310,1312,1315],{"class":198,"line":1306},38,[196,1308,1309],{"class":209},"      clearTimeout",[196,1311,214],{"class":251},[196,1313,1314],{"class":213},"timeoutId",[196,1316,414],{"class":251},[196,1318,1320],{"class":198,"line":1319},39,[196,1321,1322],{"class":217},"    }\n",[196,1324,1326],{"class":198,"line":1325},40,[196,1327,518],{"class":217},[196,1329,1331],{"class":198,"line":1330},41,[196,1332,557],{"class":217},[186,1334,1336],{"className":188,"code":1335,"filename":190,"language":191,"meta":192,"style":192},"import { createMyAdapter } from '~/lib/my-adapter'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const drain = createMyAdapter({\n    apiKey: process.env.MY_SERVICE_API_KEY!,\n  })\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n",[176,1337,1338,1357,1361,1381,1396,1419,1425,1429,1455],{"__ignoreMap":192},[196,1339,1340,1342,1344,1346,1348,1350,1352,1355],{"class":198,"line":199},[196,1341,736],{"class":202},[196,1343,357],{"class":217},[196,1345,818],{"class":213},[196,1347,746],{"class":217},[196,1349,749],{"class":202},[196,1351,338],{"class":217},[196,1353,1354],{"class":257},"~/lib/my-adapter",[196,1356,626],{"class":217},[196,1358,1359],{"class":198,"line":234},[196,1360,304],{"emptyLinePlaceholder":303},[196,1362,1363,1365,1367,1369,1371,1373,1375,1377,1379],{"class":198,"line":281},[196,1364,203],{"class":202},[196,1366,206],{"class":202},[196,1368,210],{"class":209},[196,1370,214],{"class":213},[196,1372,214],{"class":217},[196,1374,221],{"class":220},[196,1376,224],{"class":217},[196,1378,228],{"class":227},[196,1380,231],{"class":217},[196,1382,1383,1385,1388,1390,1392,1394],{"class":198,"line":288},[196,1384,836],{"class":227},[196,1386,1387],{"class":213}," drain",[196,1389,842],{"class":217},[196,1391,818],{"class":209},[196,1393,214],{"class":251},[196,1395,1139],{"class":217},[196,1397,1398,1401,1403,1406,1408,1411,1413,1416],{"class":198,"line":294},[196,1399,1400],{"class":251},"    apiKey",[196,1402,335],{"class":217},[196,1404,1405],{"class":213}," process",[196,1407,240],{"class":217},[196,1409,1410],{"class":213},"env",[196,1412,240],{"class":217},[196,1414,1415],{"class":213},"MY_SERVICE_API_KEY",[196,1417,1418],{"class":217},"!,\n",[196,1420,1421,1423],{"class":198,"line":300},[196,1422,420],{"class":217},[196,1424,414],{"class":251},[196,1426,1427],{"class":198,"line":307},[196,1428,304],{"emptyLinePlaceholder":303},[196,1430,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453],{"class":198,"line":329},[196,1432,237],{"class":213},[196,1434,240],{"class":217},[196,1436,243],{"class":213},[196,1438,240],{"class":217},[196,1440,248],{"class":209},[196,1442,214],{"class":251},[196,1444,254],{"class":217},[196,1446,258],{"class":257},[196,1448,254],{"class":217},[196,1450,263],{"class":217},[196,1452,1387],{"class":213},[196,1454,414],{"class":251},[196,1456,1457,1459],{"class":198,"line":349},[196,1458,428],{"class":217},[196,1460,414],{"class":213},[181,1462,1464],{"id":1463},"reading-from-runtime-config","Reading from Runtime Config",[172,1466,1467],{},"Follow the evlog adapter pattern for zero-config setup:",[186,1469,1471],{"className":188,"code":1470,"filename":729,"language":191,"meta":192,"style":192},"function getRuntimeConfig() {\n  try {\n    const { useRuntimeConfig } = require('nitropack/runtime')\n    return useRuntimeConfig()\n  } catch {\n    return undefined\n  }\n}\n\nexport function createMyAdapter(overrides?: Partial\u003CMyAdapterConfig>) {\n  return async (ctx: DrainContext) => {\n    const runtimeConfig = getRuntimeConfig()\n\n    // Support runtimeConfig.evlog.myService and runtimeConfig.myService\n    const evlogConfig = runtimeConfig?.evlog?.myService\n    const rootConfig = runtimeConfig?.myService\n\n    const config = {\n      apiKey: overrides?.apiKey ?? evlogConfig?.apiKey ?? rootConfig?.apiKey ?? process.env.MY_SERVICE_API_KEY,\n      endpoint: overrides?.endpoint ?? evlogConfig?.endpoint ?? rootConfig?.endpoint,\n    }\n\n    if (!config.apiKey) {\n      console.error('[my-adapter] Missing API key')\n      return\n    }\n\n    // Send the event...\n  }\n}\n",[176,1472,1473,1485,1492,1519,1528,1536,1543,1547,1551,1555,1583,1603,1616,1620,1625,1646,1661,1665,1675,1719,1750,1754,1758,1777,1797,1802,1806,1810,1815,1819],{"__ignoreMap":192},[196,1474,1475,1478,1481,1483],{"class":198,"line":199},[196,1476,1477],{"class":227},"function",[196,1479,1480],{"class":209}," getRuntimeConfig",[196,1482,943],{"class":217},[196,1484,231],{"class":217},[196,1486,1487,1490],{"class":198,"line":234},[196,1488,1489],{"class":202},"  try",[196,1491,231],{"class":217},[196,1493,1494,1496,1498,1501,1503,1505,1508,1510,1512,1515,1517],{"class":198,"line":281},[196,1495,912],{"class":227},[196,1497,357],{"class":217},[196,1499,1500],{"class":213}," useRuntimeConfig",[196,1502,746],{"class":217},[196,1504,842],{"class":217},[196,1506,1507],{"class":209}," require",[196,1509,214],{"class":251},[196,1511,254],{"class":217},[196,1513,1514],{"class":257},"nitropack/runtime",[196,1516,254],{"class":217},[196,1518,414],{"class":251},[196,1520,1521,1524,1526],{"class":198,"line":288},[196,1522,1523],{"class":202},"    return",[196,1525,1500],{"class":209},[196,1527,926],{"class":251},[196,1529,1530,1532,1534],{"class":198,"line":294},[196,1531,420],{"class":217},[196,1533,1186],{"class":202},[196,1535,231],{"class":217},[196,1537,1538,1540],{"class":198,"line":300},[196,1539,1523],{"class":202},[196,1541,1542],{"class":217}," undefined\n",[196,1544,1545],{"class":198,"line":307},[196,1546,518],{"class":217},[196,1548,1549],{"class":198,"line":329},[196,1550,557],{"class":217},[196,1552,1553],{"class":198,"line":349},[196,1554,304],{"emptyLinePlaceholder":303},[196,1556,1557,1559,1561,1563,1565,1568,1570,1573,1575,1578,1581],{"class":198,"line":379},[196,1558,203],{"class":202},[196,1560,815],{"class":227},[196,1562,818],{"class":209},[196,1564,214],{"class":217},[196,1566,1567],{"class":220},"overrides",[196,1569,483],{"class":217},[196,1571,1572],{"class":448}," Partial",[196,1574,540],{"class":217},[196,1576,1577],{"class":448},"MyAdapterConfig",[196,1579,1580],{"class":217},">)",[196,1582,231],{"class":217},[196,1584,1585,1587,1589,1591,1593,1595,1597,1599,1601],{"class":198,"line":408},[196,1586,891],{"class":202},[196,1588,266],{"class":227},[196,1590,269],{"class":217},[196,1592,272],{"class":220},[196,1594,335],{"class":217},[196,1596,449],{"class":448},[196,1598,224],{"class":217},[196,1600,228],{"class":227},[196,1602,231],{"class":217},[196,1604,1605,1607,1610,1612,1614],{"class":198,"line":417},[196,1606,912],{"class":227},[196,1608,1609],{"class":213}," runtimeConfig",[196,1611,842],{"class":217},[196,1613,1480],{"class":209},[196,1615,926],{"class":251},[196,1617,1618],{"class":198,"line":425},[196,1619,304],{"emptyLinePlaceholder":303},[196,1621,1622],{"class":198,"line":554},[196,1623,1624],{"class":284},"    // Support runtimeConfig.evlog.myService and runtimeConfig.myService\n",[196,1626,1627,1629,1632,1634,1636,1639,1641,1643],{"class":198,"line":560},[196,1628,912],{"class":227},[196,1630,1631],{"class":213}," evlogConfig",[196,1633,842],{"class":217},[196,1635,1609],{"class":213},[196,1637,1638],{"class":217},"?.",[196,1640,754],{"class":213},[196,1642,1638],{"class":217},[196,1644,1645],{"class":213},"myService\n",[196,1647,1648,1650,1653,1655,1657,1659],{"class":198,"line":565},[196,1649,912],{"class":227},[196,1651,1652],{"class":213}," rootConfig",[196,1654,842],{"class":217},[196,1656,1609],{"class":213},[196,1658,1638],{"class":217},[196,1660,1645],{"class":213},[196,1662,1663],{"class":198,"line":575},[196,1664,304],{"emptyLinePlaceholder":303},[196,1666,1667,1669,1671,1673],{"class":198,"line":585},[196,1668,912],{"class":227},[196,1670,845],{"class":213},[196,1672,842],{"class":217},[196,1674,231],{"class":217},[196,1676,1677,1680,1682,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717],{"class":198,"line":629},[196,1678,1679],{"class":251},"      apiKey",[196,1681,335],{"class":217},[196,1683,1684],{"class":213}," overrides",[196,1686,1638],{"class":217},[196,1688,1055],{"class":213},[196,1690,853],{"class":217},[196,1692,1631],{"class":213},[196,1694,1638],{"class":217},[196,1696,1055],{"class":213},[196,1698,853],{"class":217},[196,1700,1652],{"class":213},[196,1702,1638],{"class":217},[196,1704,1055],{"class":213},[196,1706,853],{"class":217},[196,1708,1405],{"class":213},[196,1710,240],{"class":217},[196,1712,1410],{"class":213},[196,1714,240],{"class":217},[196,1716,1415],{"class":213},[196,1718,346],{"class":217},[196,1720,1721,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748],{"class":198,"line":639},[196,1722,1723],{"class":251},"      endpoint",[196,1725,335],{"class":217},[196,1727,1684],{"class":213},[196,1729,1638],{"class":217},[196,1731,850],{"class":213},[196,1733,853],{"class":217},[196,1735,1631],{"class":213},[196,1737,1638],{"class":217},[196,1739,850],{"class":213},[196,1741,853],{"class":217},[196,1743,1652],{"class":213},[196,1745,1638],{"class":217},[196,1747,850],{"class":213},[196,1749,346],{"class":217},[196,1751,1752],{"class":198,"line":649},[196,1753,1322],{"class":217},[196,1755,1756],{"class":198,"line":659},[196,1757,304],{"emptyLinePlaceholder":303},[196,1759,1760,1763,1765,1767,1769,1771,1773,1775],{"class":198,"line":669},[196,1761,1762],{"class":202},"    if",[196,1764,269],{"class":251},[196,1766,1125],{"class":217},[196,1768,823],{"class":213},[196,1770,240],{"class":217},[196,1772,1055],{"class":213},[196,1774,1136],{"class":251},[196,1776,1139],{"class":217},[196,1778,1779,1782,1784,1786,1788,1790,1793,1795],{"class":198,"line":679},[196,1780,1781],{"class":213},"      console",[196,1783,240],{"class":217},[196,1785,623],{"class":209},[196,1787,214],{"class":251},[196,1789,254],{"class":217},[196,1791,1792],{"class":257},"[my-adapter] Missing API key",[196,1794,254],{"class":217},[196,1796,414],{"class":251},[196,1798,1799],{"class":198,"line":689},[196,1800,1801],{"class":202},"      return\n",[196,1803,1804],{"class":198,"line":695},[196,1805,1322],{"class":217},[196,1807,1808],{"class":198,"line":716},[196,1809,304],{"emptyLinePlaceholder":303},[196,1811,1812],{"class":198,"line":1117},[196,1813,1814],{"class":284},"    // Send the event...\n",[196,1816,1817],{"class":198,"line":1142},[196,1818,518],{"class":217},[196,1820,1821],{"class":198,"line":1175},[196,1822,557],{"class":217},[181,1824,1826],{"id":1825},"filtering-events","Filtering Events",[172,1828,1829],{},"Filter which events to send:",[186,1831,1833],{"className":188,"code":1832,"filename":190,"language":191,"meta":192,"style":192},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    // Only send errors\n    if (ctx.event.level !== 'error') return\n\n    // Skip health checks\n    if (ctx.request?.path === '/health') return\n\n    // Skip sampled-out events\n    if (ctx.event._sampled === false) return\n\n    await sendToMyService(ctx.event)\n  })\n})\n",[176,1834,1835,1855,1889,1894,1925,1929,1934,1965,1969,1974,2001,2005,2022,2028],{"__ignoreMap":192},[196,1836,1837,1839,1841,1843,1845,1847,1849,1851,1853],{"class":198,"line":199},[196,1838,203],{"class":202},[196,1840,206],{"class":202},[196,1842,210],{"class":209},[196,1844,214],{"class":213},[196,1846,214],{"class":217},[196,1848,221],{"class":220},[196,1850,224],{"class":217},[196,1852,228],{"class":227},[196,1854,231],{"class":217},[196,1856,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887],{"class":198,"line":234},[196,1858,237],{"class":213},[196,1860,240],{"class":217},[196,1862,243],{"class":213},[196,1864,240],{"class":217},[196,1866,248],{"class":209},[196,1868,214],{"class":251},[196,1870,254],{"class":217},[196,1872,258],{"class":257},[196,1874,254],{"class":217},[196,1876,263],{"class":217},[196,1878,266],{"class":227},[196,1880,269],{"class":217},[196,1882,272],{"class":220},[196,1884,224],{"class":217},[196,1886,228],{"class":227},[196,1888,231],{"class":217},[196,1890,1891],{"class":198,"line":281},[196,1892,1893],{"class":284},"    // Only send errors\n",[196,1895,1896,1898,1900,1902,1904,1906,1908,1911,1914,1916,1918,1920,1922],{"class":198,"line":288},[196,1897,1762],{"class":202},[196,1899,269],{"class":251},[196,1901,272],{"class":213},[196,1903,240],{"class":217},[196,1905,401],{"class":213},[196,1907,240],{"class":217},[196,1909,1910],{"class":213},"level",[196,1912,1913],{"class":217}," !==",[196,1915,338],{"class":217},[196,1917,623],{"class":257},[196,1919,254],{"class":217},[196,1921,1136],{"class":251},[196,1923,1924],{"class":202},"return\n",[196,1926,1927],{"class":198,"line":294},[196,1928,304],{"emptyLinePlaceholder":303},[196,1930,1931],{"class":198,"line":300},[196,1932,1933],{"class":284},"    // Skip health checks\n",[196,1935,1936,1938,1940,1942,1944,1947,1949,1952,1954,1956,1959,1961,1963],{"class":198,"line":307},[196,1937,1762],{"class":202},[196,1939,269],{"class":251},[196,1941,272],{"class":213},[196,1943,240],{"class":217},[196,1945,1946],{"class":213},"request",[196,1948,1638],{"class":217},[196,1950,1951],{"class":213},"path",[196,1953,1223],{"class":217},[196,1955,338],{"class":217},[196,1957,1958],{"class":257},"/health",[196,1960,254],{"class":217},[196,1962,1136],{"class":251},[196,1964,1924],{"class":202},[196,1966,1967],{"class":198,"line":329},[196,1968,304],{"emptyLinePlaceholder":303},[196,1970,1971],{"class":198,"line":349},[196,1972,1973],{"class":284},"    // Skip sampled-out events\n",[196,1975,1976,1978,1980,1982,1984,1986,1988,1991,1993,1997,1999],{"class":198,"line":379},[196,1977,1762],{"class":202},[196,1979,269],{"class":251},[196,1981,272],{"class":213},[196,1983,240],{"class":217},[196,1985,401],{"class":213},[196,1987,240],{"class":217},[196,1989,1990],{"class":213},"_sampled",[196,1992,1223],{"class":217},[196,1994,1996],{"class":1995},"sfNiH"," false",[196,1998,1136],{"class":251},[196,2000,1924],{"class":202},[196,2002,2003],{"class":198,"line":408},[196,2004,304],{"emptyLinePlaceholder":303},[196,2006,2007,2009,2012,2014,2016,2018,2020],{"class":198,"line":417},[196,2008,310],{"class":202},[196,2010,2011],{"class":209}," sendToMyService",[196,2013,214],{"class":251},[196,2015,272],{"class":213},[196,2017,240],{"class":217},[196,2019,401],{"class":213},[196,2021,414],{"class":251},[196,2023,2024,2026],{"class":198,"line":425},[196,2025,420],{"class":217},[196,2027,414],{"class":251},[196,2029,2030,2032],{"class":198,"line":554},[196,2031,428],{"class":217},[196,2033,414],{"class":213},[181,2035,2037],{"id":2036},"transforming-events","Transforming Events",[172,2039,2040],{},"Transform events before sending:",[186,2042,2044],{"className":188,"code":2043,"filename":190,"language":191,"meta":192,"style":192},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    // Transform to your service's format\n    const payload = {\n      ts: new Date(ctx.event.timestamp).getTime(),\n      severity: ctx.event.level.toUpperCase(),\n      message: JSON.stringify(ctx.event),\n      labels: {\n        service: ctx.event.service,\n        env: ctx.event.environment,\n      },\n      attributes: {\n        method: ctx.event.method,\n        path: ctx.event.path,\n        status: ctx.event.status,\n        duration: ctx.event.duration,\n      },\n    }\n\n    await fetch('https://logs.example.com/v1/push', {\n      method: 'POST',\n      body: JSON.stringify(payload),\n    })\n  })\n})\n",[176,2045,2046,2066,2100,2105,2116,2152,2179,2204,2213,2233,2253,2258,2267,2286,2305,2324,2344,2348,2352,2356,2375,2389,2410,2416,2422],{"__ignoreMap":192},[196,2047,2048,2050,2052,2054,2056,2058,2060,2062,2064],{"class":198,"line":199},[196,2049,203],{"class":202},[196,2051,206],{"class":202},[196,2053,210],{"class":209},[196,2055,214],{"class":213},[196,2057,214],{"class":217},[196,2059,221],{"class":220},[196,2061,224],{"class":217},[196,2063,228],{"class":227},[196,2065,231],{"class":217},[196,2067,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098],{"class":198,"line":234},[196,2069,237],{"class":213},[196,2071,240],{"class":217},[196,2073,243],{"class":213},[196,2075,240],{"class":217},[196,2077,248],{"class":209},[196,2079,214],{"class":251},[196,2081,254],{"class":217},[196,2083,258],{"class":257},[196,2085,254],{"class":217},[196,2087,263],{"class":217},[196,2089,266],{"class":227},[196,2091,269],{"class":217},[196,2093,272],{"class":220},[196,2095,224],{"class":217},[196,2097,228],{"class":227},[196,2099,231],{"class":217},[196,2101,2102],{"class":198,"line":281},[196,2103,2104],{"class":284},"    // Transform to your service's format\n",[196,2106,2107,2109,2112,2114],{"class":198,"line":288},[196,2108,912],{"class":227},[196,2110,2111],{"class":213}," payload",[196,2113,842],{"class":217},[196,2115,231],{"class":217},[196,2117,2118,2121,2123,2125,2128,2130,2132,2134,2136,2138,2141,2143,2145,2148,2150],{"class":198,"line":294},[196,2119,2120],{"class":251},"      ts",[196,2122,335],{"class":217},[196,2124,920],{"class":217},[196,2126,2127],{"class":209}," Date",[196,2129,214],{"class":251},[196,2131,272],{"class":213},[196,2133,240],{"class":217},[196,2135,401],{"class":213},[196,2137,240],{"class":217},[196,2139,2140],{"class":213},"timestamp",[196,2142,224],{"class":251},[196,2144,240],{"class":217},[196,2146,2147],{"class":209},"getTime",[196,2149,943],{"class":251},[196,2151,346],{"class":217},[196,2153,2154,2157,2159,2162,2164,2166,2168,2170,2172,2175,2177],{"class":198,"line":300},[196,2155,2156],{"class":251},"      severity",[196,2158,335],{"class":217},[196,2160,2161],{"class":213}," ctx",[196,2163,240],{"class":217},[196,2165,401],{"class":213},[196,2167,240],{"class":217},[196,2169,1910],{"class":213},[196,2171,240],{"class":217},[196,2173,2174],{"class":209},"toUpperCase",[196,2176,943],{"class":251},[196,2178,346],{"class":217},[196,2180,2181,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202],{"class":198,"line":307},[196,2182,2183],{"class":251},"      message",[196,2185,335],{"class":217},[196,2187,387],{"class":213},[196,2189,240],{"class":217},[196,2191,392],{"class":209},[196,2193,214],{"class":251},[196,2195,272],{"class":213},[196,2197,240],{"class":217},[196,2199,401],{"class":213},[196,2201,224],{"class":251},[196,2203,346],{"class":217},[196,2205,2206,2209,2211],{"class":198,"line":329},[196,2207,2208],{"class":251},"      labels",[196,2210,335],{"class":217},[196,2212,231],{"class":217},[196,2214,2215,2218,2220,2222,2224,2226,2228,2231],{"class":198,"line":349},[196,2216,2217],{"class":251},"        service",[196,2219,335],{"class":217},[196,2221,2161],{"class":213},[196,2223,240],{"class":217},[196,2225,401],{"class":213},[196,2227,240],{"class":217},[196,2229,2230],{"class":213},"service",[196,2232,346],{"class":217},[196,2234,2235,2238,2240,2242,2244,2246,2248,2251],{"class":198,"line":379},[196,2236,2237],{"class":251},"        env",[196,2239,335],{"class":217},[196,2241,2161],{"class":213},[196,2243,240],{"class":217},[196,2245,401],{"class":213},[196,2247,240],{"class":217},[196,2249,2250],{"class":213},"environment",[196,2252,346],{"class":217},[196,2254,2255],{"class":198,"line":408},[196,2256,2257],{"class":217},"      },\n",[196,2259,2260,2263,2265],{"class":198,"line":417},[196,2261,2262],{"class":251},"      attributes",[196,2264,335],{"class":217},[196,2266,231],{"class":217},[196,2268,2269,2271,2273,2275,2277,2279,2281,2284],{"class":198,"line":425},[196,2270,999],{"class":251},[196,2272,335],{"class":217},[196,2274,2161],{"class":213},[196,2276,240],{"class":217},[196,2278,401],{"class":213},[196,2280,240],{"class":217},[196,2282,2283],{"class":213},"method",[196,2285,346],{"class":217},[196,2287,2288,2291,2293,2295,2297,2299,2301,2303],{"class":198,"line":554},[196,2289,2290],{"class":251},"        path",[196,2292,335],{"class":217},[196,2294,2161],{"class":213},[196,2296,240],{"class":217},[196,2298,401],{"class":213},[196,2300,240],{"class":217},[196,2302,1951],{"class":213},[196,2304,346],{"class":217},[196,2306,2307,2310,2312,2314,2316,2318,2320,2322],{"class":198,"line":560},[196,2308,2309],{"class":251},"        status",[196,2311,335],{"class":217},[196,2313,2161],{"class":213},[196,2315,240],{"class":217},[196,2317,401],{"class":213},[196,2319,240],{"class":217},[196,2321,1167],{"class":213},[196,2323,346],{"class":217},[196,2325,2326,2329,2331,2333,2335,2337,2339,2342],{"class":198,"line":565},[196,2327,2328],{"class":251},"        duration",[196,2330,335],{"class":217},[196,2332,2161],{"class":213},[196,2334,240],{"class":217},[196,2336,401],{"class":213},[196,2338,240],{"class":217},[196,2340,2341],{"class":213},"duration",[196,2343,346],{"class":217},[196,2345,2346],{"class":198,"line":575},[196,2347,2257],{"class":217},[196,2349,2350],{"class":198,"line":585},[196,2351,1322],{"class":217},[196,2353,2354],{"class":198,"line":629},[196,2355,304],{"emptyLinePlaceholder":303},[196,2357,2358,2360,2362,2364,2366,2369,2371,2373],{"class":198,"line":639},[196,2359,310],{"class":202},[196,2361,313],{"class":209},[196,2363,214],{"class":251},[196,2365,254],{"class":217},[196,2367,2368],{"class":257},"https://logs.example.com/v1/push",[196,2370,254],{"class":217},[196,2372,263],{"class":217},[196,2374,231],{"class":217},[196,2376,2377,2379,2381,2383,2385,2387],{"class":198,"line":649},[196,2378,332],{"class":251},[196,2380,335],{"class":217},[196,2382,338],{"class":217},[196,2384,341],{"class":257},[196,2386,254],{"class":217},[196,2388,346],{"class":217},[196,2390,2391,2393,2395,2397,2399,2401,2403,2406,2408],{"class":198,"line":659},[196,2392,382],{"class":251},[196,2394,335],{"class":217},[196,2396,387],{"class":213},[196,2398,240],{"class":217},[196,2400,392],{"class":209},[196,2402,214],{"class":251},[196,2404,2405],{"class":213},"payload",[196,2407,224],{"class":251},[196,2409,346],{"class":217},[196,2411,2412,2414],{"class":198,"line":669},[196,2413,411],{"class":217},[196,2415,414],{"class":251},[196,2417,2418,2420],{"class":198,"line":679},[196,2419,420],{"class":217},[196,2421,414],{"class":251},[196,2423,2424,2426],{"class":198,"line":689},[196,2425,428],{"class":217},[196,2427,414],{"class":213},[181,2429,2431],{"id":2430},"batching","Batching",[172,2433,2434,2435,2439],{},"For high-throughput scenarios, use the ",[2436,2437,2438],"a",{"href":97},"Drain Pipeline"," to batch events, retry on failure, and handle buffer overflow automatically:",[186,2441,2443],{"className":188,"code":2442,"filename":190,"language":191,"meta":192,"style":192},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>({\n    batch: { size: 100, intervalMs: 5000 },\n  })\n\n  const drain = pipeline(async (batch) => {\n    await fetch('https://api.example.com/logs/batch', {\n      method: 'POST',\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",[176,2444,2445,2465,2485,2489,2509,2531,2560,2566,2570,2596,2615,2629,2667,2673,2679,2683,2709,2747],{"__ignoreMap":192},[196,2446,2447,2449,2451,2453,2455,2457,2459,2461,2463],{"class":198,"line":199},[196,2448,736],{"class":202},[196,2450,739],{"class":202},[196,2452,357],{"class":217},[196,2454,449],{"class":213},[196,2456,746],{"class":217},[196,2458,749],{"class":202},[196,2460,338],{"class":217},[196,2462,754],{"class":257},[196,2464,626],{"class":217},[196,2466,2467,2469,2471,2474,2476,2478,2480,2483],{"class":198,"line":234},[196,2468,736],{"class":202},[196,2470,357],{"class":217},[196,2472,2473],{"class":213}," createDrainPipeline",[196,2475,746],{"class":217},[196,2477,749],{"class":202},[196,2479,338],{"class":217},[196,2481,2482],{"class":257},"evlog/pipeline",[196,2484,626],{"class":217},[196,2486,2487],{"class":198,"line":281},[196,2488,304],{"emptyLinePlaceholder":303},[196,2490,2491,2493,2495,2497,2499,2501,2503,2505,2507],{"class":198,"line":288},[196,2492,203],{"class":202},[196,2494,206],{"class":202},[196,2496,210],{"class":209},[196,2498,214],{"class":213},[196,2500,214],{"class":217},[196,2502,221],{"class":220},[196,2504,224],{"class":217},[196,2506,228],{"class":227},[196,2508,231],{"class":217},[196,2510,2511,2513,2516,2518,2520,2522,2524,2527,2529],{"class":198,"line":294},[196,2512,836],{"class":227},[196,2514,2515],{"class":213}," pipeline",[196,2517,842],{"class":217},[196,2519,2473],{"class":209},[196,2521,540],{"class":217},[196,2523,178],{"class":448},[196,2525,2526],{"class":217},">",[196,2528,214],{"class":251},[196,2530,1139],{"class":217},[196,2532,2533,2536,2538,2540,2543,2545,2548,2550,2553,2555,2558],{"class":198,"line":300},[196,2534,2535],{"class":251},"    batch",[196,2537,335],{"class":217},[196,2539,357],{"class":217},[196,2541,2542],{"class":251}," size",[196,2544,335],{"class":217},[196,2546,2547],{"class":881}," 100",[196,2549,263],{"class":217},[196,2551,2552],{"class":251}," intervalMs",[196,2554,335],{"class":217},[196,2556,2557],{"class":881}," 5000",[196,2559,376],{"class":217},[196,2561,2562,2564],{"class":198,"line":307},[196,2563,420],{"class":217},[196,2565,414],{"class":251},[196,2567,2568],{"class":198,"line":329},[196,2569,304],{"emptyLinePlaceholder":303},[196,2571,2572,2574,2576,2578,2580,2582,2585,2587,2590,2592,2594],{"class":198,"line":349},[196,2573,836],{"class":227},[196,2575,1387],{"class":213},[196,2577,842],{"class":217},[196,2579,2515],{"class":209},[196,2581,214],{"class":251},[196,2583,2584],{"class":227},"async",[196,2586,269],{"class":217},[196,2588,2589],{"class":220},"batch",[196,2591,224],{"class":217},[196,2593,228],{"class":227},[196,2595,231],{"class":217},[196,2597,2598,2600,2602,2604,2606,2609,2611,2613],{"class":198,"line":379},[196,2599,310],{"class":202},[196,2601,313],{"class":209},[196,2603,214],{"class":251},[196,2605,254],{"class":217},[196,2607,2608],{"class":257},"https://api.example.com/logs/batch",[196,2610,254],{"class":217},[196,2612,263],{"class":217},[196,2614,231],{"class":217},[196,2616,2617,2619,2621,2623,2625,2627],{"class":198,"line":408},[196,2618,332],{"class":251},[196,2620,335],{"class":217},[196,2622,338],{"class":217},[196,2624,341],{"class":257},[196,2626,254],{"class":217},[196,2628,346],{"class":217},[196,2630,2631,2633,2635,2637,2639,2641,2643,2645,2647,2650,2652,2654,2656,2658,2660,2662,2665],{"class":198,"line":417},[196,2632,382],{"class":251},[196,2634,335],{"class":217},[196,2636,387],{"class":213},[196,2638,240],{"class":217},[196,2640,392],{"class":209},[196,2642,214],{"class":251},[196,2644,2589],{"class":213},[196,2646,240],{"class":217},[196,2648,2649],{"class":209},"map",[196,2651,214],{"class":251},[196,2653,272],{"class":220},[196,2655,228],{"class":227},[196,2657,2161],{"class":213},[196,2659,240],{"class":217},[196,2661,401],{"class":213},[196,2663,2664],{"class":251},"))",[196,2666,346],{"class":217},[196,2668,2669,2671],{"class":198,"line":425},[196,2670,411],{"class":217},[196,2672,414],{"class":251},[196,2674,2675,2677],{"class":198,"line":554},[196,2676,420],{"class":217},[196,2678,414],{"class":251},[196,2680,2681],{"class":198,"line":560},[196,2682,304],{"emptyLinePlaceholder":303},[196,2684,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707],{"class":198,"line":565},[196,2686,237],{"class":213},[196,2688,240],{"class":217},[196,2690,243],{"class":213},[196,2692,240],{"class":217},[196,2694,248],{"class":209},[196,2696,214],{"class":251},[196,2698,254],{"class":217},[196,2700,258],{"class":257},[196,2702,254],{"class":217},[196,2704,263],{"class":217},[196,2706,1387],{"class":213},[196,2708,414],{"class":251},[196,2710,2711,2713,2715,2717,2719,2721,2723,2725,2728,2730,2732,2735,2737,2739,2741,2744],{"class":198,"line":575},[196,2712,237],{"class":213},[196,2714,240],{"class":217},[196,2716,243],{"class":213},[196,2718,240],{"class":217},[196,2720,248],{"class":209},[196,2722,214],{"class":251},[196,2724,254],{"class":217},[196,2726,2727],{"class":257},"close",[196,2729,254],{"class":217},[196,2731,263],{"class":217},[196,2733,2734],{"class":217}," ()",[196,2736,228],{"class":227},[196,2738,1387],{"class":213},[196,2740,240],{"class":217},[196,2742,2743],{"class":209},"flush",[196,2745,2746],{"class":251},"())\n",[196,2748,2749,2751],{"class":198,"line":585},[196,2750,428],{"class":217},[196,2752,414],{"class":213},[2754,2755,2757,2758,2761],"callout",{"color":605,"icon":2756},"i-lucide-arrow-right","See the ",[2436,2759,2760],{"href":97},"Pipeline documentation"," for the full options reference, retry strategies, and buffer overflow handling.",[181,2763,2765],{"id":2764},"error-handling-best-practices","Error Handling Best Practices",[2767,2768,2769,2777,2787,2793],"ol",{},[2770,2771,2772,2776],"li",{},[2773,2774,2775],"strong",{},"Never throw errors"," - The drain should not crash your app",[2770,2778,2779,2782,2783,2786],{},[2773,2780,2781],{},"Log failures silently"," - Use ",[176,2784,2785],{},"console.error"," for debugging",[2770,2788,2789,2792],{},[2773,2790,2791],{},"Use timeouts"," - Prevent hanging requests",[2770,2794,2795,2798],{},[2773,2796,2797],{},"Graceful degradation"," - Skip sending if config is missing",[186,2800,2803],{"className":188,"code":2801,"filename":2802,"language":191,"meta":192,"style":192},"export function createRobustAdapter(config: Config) {\n  return async (ctx: DrainContext) => {\n    // Validate config\n    if (!config.apiKey) {\n      console.error('[adapter] Missing API key, skipping')\n      return\n    }\n\n    const controller = new AbortController()\n    const timeoutId = setTimeout(() => controller.abort(), 5000)\n\n    try {\n      await fetch(config.endpoint, {\n        method: 'POST',\n        body: JSON.stringify(ctx.event),\n        signal: controller.signal,\n      })\n    } catch (error) {\n      // Log but don't throw\n      console.error('[adapter] Failed to send:', error)\n    } finally {\n      clearTimeout(timeoutId)\n    }\n  }\n}\n","lib/robust-adapter.ts",[176,2804,2805,2827,2847,2852,2870,2889,2893,2897,2901,2915,2945,2949,2955,2974,2988,3012,3026,3032,3046,3051,3074,3082,3092,3096,3100],{"__ignoreMap":192},[196,2806,2807,2809,2811,2814,2816,2818,2820,2823,2825],{"class":198,"line":199},[196,2808,203],{"class":202},[196,2810,815],{"class":227},[196,2812,2813],{"class":209}," createRobustAdapter",[196,2815,214],{"class":217},[196,2817,823],{"class":220},[196,2819,335],{"class":217},[196,2821,2822],{"class":448}," Config",[196,2824,224],{"class":217},[196,2826,231],{"class":217},[196,2828,2829,2831,2833,2835,2837,2839,2841,2843,2845],{"class":198,"line":234},[196,2830,891],{"class":202},[196,2832,266],{"class":227},[196,2834,269],{"class":217},[196,2836,272],{"class":220},[196,2838,335],{"class":217},[196,2840,449],{"class":448},[196,2842,224],{"class":217},[196,2844,228],{"class":227},[196,2846,231],{"class":217},[196,2848,2849],{"class":198,"line":281},[196,2850,2851],{"class":284},"    // Validate config\n",[196,2853,2854,2856,2858,2860,2862,2864,2866,2868],{"class":198,"line":288},[196,2855,1762],{"class":202},[196,2857,269],{"class":251},[196,2859,1125],{"class":217},[196,2861,823],{"class":213},[196,2863,240],{"class":217},[196,2865,1055],{"class":213},[196,2867,1136],{"class":251},[196,2869,1139],{"class":217},[196,2871,2872,2874,2876,2878,2880,2882,2885,2887],{"class":198,"line":294},[196,2873,1781],{"class":213},[196,2875,240],{"class":217},[196,2877,623],{"class":209},[196,2879,214],{"class":251},[196,2881,254],{"class":217},[196,2883,2884],{"class":257},"[adapter] Missing API key, skipping",[196,2886,254],{"class":217},[196,2888,414],{"class":251},[196,2890,2891],{"class":198,"line":300},[196,2892,1801],{"class":202},[196,2894,2895],{"class":198,"line":307},[196,2896,1322],{"class":217},[196,2898,2899],{"class":198,"line":329},[196,2900,304],{"emptyLinePlaceholder":303},[196,2902,2903,2905,2907,2909,2911,2913],{"class":198,"line":349},[196,2904,912],{"class":227},[196,2906,915],{"class":213},[196,2908,842],{"class":217},[196,2910,920],{"class":217},[196,2912,923],{"class":209},[196,2914,926],{"class":251},[196,2916,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943],{"class":198,"line":379},[196,2918,912],{"class":227},[196,2920,933],{"class":213},[196,2922,842],{"class":217},[196,2924,938],{"class":209},[196,2926,214],{"class":251},[196,2928,943],{"class":217},[196,2930,228],{"class":227},[196,2932,915],{"class":213},[196,2934,240],{"class":217},[196,2936,952],{"class":209},[196,2938,943],{"class":251},[196,2940,263],{"class":217},[196,2942,2557],{"class":881},[196,2944,414],{"class":251},[196,2946,2947],{"class":198,"line":408},[196,2948,304],{"emptyLinePlaceholder":303},[196,2950,2951,2953],{"class":198,"line":417},[196,2952,969],{"class":202},[196,2954,231],{"class":217},[196,2956,2957,2960,2962,2964,2966,2968,2970,2972],{"class":198,"line":425},[196,2958,2959],{"class":202},"      await",[196,2961,313],{"class":209},[196,2963,214],{"class":251},[196,2965,823],{"class":213},[196,2967,240],{"class":217},[196,2969,850],{"class":213},[196,2971,263],{"class":217},[196,2973,231],{"class":217},[196,2975,2976,2978,2980,2982,2984,2986],{"class":198,"line":554},[196,2977,999],{"class":251},[196,2979,335],{"class":217},[196,2981,338],{"class":217},[196,2983,341],{"class":257},[196,2985,254],{"class":217},[196,2987,346],{"class":217},[196,2989,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010],{"class":198,"line":560},[196,2991,1067],{"class":251},[196,2993,335],{"class":217},[196,2995,387],{"class":213},[196,2997,240],{"class":217},[196,2999,392],{"class":209},[196,3001,214],{"class":251},[196,3003,272],{"class":213},[196,3005,240],{"class":217},[196,3007,401],{"class":213},[196,3009,224],{"class":251},[196,3011,346],{"class":217},[196,3013,3014,3016,3018,3020,3022,3024],{"class":198,"line":565},[196,3015,1092],{"class":251},[196,3017,335],{"class":217},[196,3019,915],{"class":213},[196,3021,240],{"class":217},[196,3023,1101],{"class":213},[196,3025,346],{"class":217},[196,3027,3028,3030],{"class":198,"line":575},[196,3029,1108],{"class":217},[196,3031,414],{"class":251},[196,3033,3034,3036,3038,3040,3042,3044],{"class":198,"line":585},[196,3035,411],{"class":217},[196,3037,1186],{"class":202},[196,3039,269],{"class":251},[196,3041,623],{"class":213},[196,3043,1136],{"class":251},[196,3045,1139],{"class":217},[196,3047,3048],{"class":198,"line":629},[196,3049,3050],{"class":284},"      // Log but don't throw\n",[196,3052,3053,3055,3057,3059,3061,3063,3066,3068,3070,3072],{"class":198,"line":639},[196,3054,1781],{"class":213},[196,3056,240],{"class":217},[196,3058,623],{"class":209},[196,3060,214],{"class":251},[196,3062,254],{"class":217},[196,3064,3065],{"class":257},"[adapter] Failed to send:",[196,3067,254],{"class":217},[196,3069,263],{"class":217},[196,3071,1215],{"class":213},[196,3073,414],{"class":251},[196,3075,3076,3078,3080],{"class":198,"line":649},[196,3077,411],{"class":217},[196,3079,1301],{"class":202},[196,3081,231],{"class":217},[196,3083,3084,3086,3088,3090],{"class":198,"line":659},[196,3085,1309],{"class":209},[196,3087,214],{"class":251},[196,3089,1314],{"class":213},[196,3091,414],{"class":251},[196,3093,3094],{"class":198,"line":669},[196,3095,1322],{"class":217},[196,3097,3098],{"class":198,"line":679},[196,3099,518],{"class":217},[196,3101,3102],{"class":198,"line":689},[196,3103,557],{"class":217},[181,3105,3107],{"id":3106},"next-steps","Next Steps",[3109,3110,3111,3117,3123,3129],"ul",{},[2770,3112,3113,3116],{},[2436,3114,3115],{"href":67},"Axiom Adapter"," - See a production-ready adapter implementation",[2770,3118,3119,3122],{},[2436,3120,3121],{"href":72},"OTLP Adapter"," - OpenTelemetry Protocol adapter",[2770,3124,3125,3128],{},[2436,3126,3127],{"href":77},"PostHog Adapter"," - PostHog product analytics adapter",[2770,3130,3131,3133],{},[2436,3132,46],{"href":47}," - Security and production tips",[3135,3136,3137],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":192,"searchDepth":234,"depth":234,"links":3139},[3140,3141,3142,3143,3144,3145,3146,3147,3148],{"id":183,"depth":234,"text":184},{"id":433,"depth":234,"text":434},{"id":721,"depth":234,"text":722},{"id":1463,"depth":234,"text":1464},{"id":1825,"depth":234,"text":1826},{"id":2036,"depth":234,"text":2037},{"id":2430,"depth":234,"text":2431},{"id":2764,"depth":234,"text":2765},{"id":3106,"depth":234,"text":3107},"Build your own adapter to send logs to any destination. Factory patterns, batching, filtering, and error handling best practices.","md",[3152,3155],{"label":3115,"icon":69,"to":67,"color":3153,"variant":3154},"neutral","subtle",{"label":46,"icon":49,"to":47,"color":3153,"variant":3154},{},{"icon":94},{"title":91,"description":3149},"UJQ0F-HJLPvKReze1zggAQ9hOqzxD-Wu2wCHHuV0axM",[3161,3163],{"title":86,"path":87,"stem":88,"description":3162,"icon":89,"children":-1},"Send wide events to Better Stack (formerly Logtail) for log management, alerting, and dashboards. Zero-config setup with environment variables.",{"title":96,"path":97,"stem":98,"description":3164,"icon":99,"children":-1},"Batch events, retry on failure, and protect against buffer overflow with the shared drain pipeline. Supports fan-out to multiple adapters.",1772878750157]