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