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