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