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