Can*_*nez 2 c# .net-core asp.net-core audit.net asp.net-core-2.1
我尝试设置下面的配置,但我认为只有其中一个正在使用。
有没有办法将两者链接起来,或者有没有其他方法可以使用多个输出提供者?
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));
Run Code Online (Sandbox Code Playgroud)
将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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的启动代码中,您只需将您配置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
}
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |