gpt4 book ai didi

c# - 在 Audit.Net 中有没有办法使用多个输出提供程序?

转载 作者:行者123 更新时间:2023-12-04 16:28:22 25 4
gpt4 key购买 nike

我尝试设置下面的配置,但我认为只有其中一个正在使用。

有没有办法将两者链接起来,或者有没有其他方法可以使用多个输出提供程序?

            Audit.Core.Configuration.Setup()
.UseElasticsearch(config => config
.ConnectionSettings(new Uri(elasticUri))
.Index("sample-index")
.Id(ev => Guid.NewGuid()));

Audit.Core.Configuration.Setup()
.UseUdp(config => config
.RemoteAddress("127.0.0.1")
.RemotePort(6060));

最佳答案

DataProvider 在整个应用程序中全局共享,因此您不能分配多个。

但是您可以轻松地实现自定义数据提供程序,它包装一些其他数据提供程序并依次调用它们的 InsertEvent/ReplaceEvent 方法。例如:

public class MultiDataProvider : AuditDataProvider
{
private AuditDataProvider[] _providers;
public MultiDataProvider(AuditDataProvider[] providers)
{
_providers = providers;
}
public override object InsertEvent(AuditEvent auditEvent)
{
object eventId = null;
foreach (var dp in _providers)
{
eventId = dp.InsertEvent(auditEvent);
}
return eventId;
}
public async override Task<object> InsertEventAsync(AuditEvent auditEvent)
{
object eventId = null;
foreach (var dp in _providers)
{
eventId = await dp.InsertEventAsync(auditEvent);
}
return eventId;
}
public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
{
foreach (var dp in _providers)
{
dp.ReplaceEvent(eventId, auditEvent);
}
}
public async override Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
{
foreach (var dp in _providers)
{
await dp.ReplaceEventAsync(eventId, auditEvent);
}
}

}

然后在您的启动代码中,您只需将 MultiDataProvider 配置为数据提供者,例如:

Audit.Core.Configuration.DataProvider = new MultiDataProvider(
new AuditDataProvider[]
{
new ElasticsearchDataProvider(_ => _
.ConnectionSettings(new Uri(elasticUri))
.Index("sample-index")
.Id(ev => Guid.NewGuid())),
new UdpDataProvider()
{
RemoteAddress = IPAddress.Parse("127.0.0.1"),
RemotePort = 6060
}
}
);

关于c# - 在 Audit.Net 中有没有办法使用多个输出提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com