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