【问题标题】:In Audit.Net is there a way to use multiple output provider?在 Audit.Net 中有没有办法使用多个输出提供程序?
【发布时间】:2020-01-31 20:29:34
【问题描述】:

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

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

            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));

【问题讨论】:

    标签: c# asp.net-core .net-core asp.net-core-2.1 audit.net


    【解决方案1】:

    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
            }
        }
    );
    

    【讨论】:

    • 知道了!这也是我现在正在尝试使用的自定义数据提供程序,非常感谢!
    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 2012-08-18
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多