每个功能的 serilog 多个实例

Posted

技术标签:

【中文标题】每个功能的 serilog 多个实例【英文标题】:serilog multiple instance per functionality 【发布时间】:2019-01-01 08:56:27 【问题描述】:

虽然我有一个用于错误、异常等的通用记录器,但它使用滚动文件接收器将内容记录到 my-date.log。

但是,我需要另一个审计实例来审计-date.log 和另一个实例来将性能信息写入 perf-date.log。

如何创建具有不同配置或接收器的多个 serilog 实例?

【问题讨论】:

有趣的问题,Expression-based event filtering 有帮助吗? 看看克里斯托的回答***.com/questions/51213779/… 【参考方案1】:

你可以这样做:

        var loggerConfiguration = new LoggerConfiguration()
                       .MinimumLevel.Verbose()
                       .Enrich.FromLogContext();
        var fileBasePath = "<base log path>";
        loggerConfiguration
            .WriteTo.Console()
            .WriteTo.RollingFile(fileBasePath + "log-info-Date.txt")
            .WriteTo.Logger(fileLogger => fileLogger
                    .MinimumLevel.Error()
                    .WriteTo.RollingFile(fileBasePath + "log-error-Date.txt"))
            .WriteTo.Logger(fileLogger => fileLogger
                    .Filter.ByIncludingOnly(x =>
                          x.Level == LogEventLevel.Information &&
                          x.Properties.ContainsKey("<Audit Key>"))
                    .WriteTo.RollingFile(fileBasePath + "log-audit-Date.txt"));
        Log.Logger = loggerConfiguration.CreateLogger();

注意:Audit Key 是审计日志中使用的密钥

【讨论】:

我不想进行过滤。我需要一个尊重其自身配置的新实例。【参考方案2】:

我假设您需要不同的接口名称来编写审计和性能数据(注入到您的主要业务代码中)。如果是这种情况,只需使用新的 Serilog 实例实现您的 IAudi、IPerfData,您可以完全自定义保存日志的位置/方式。

【讨论】:

以上是关于每个功能的 serilog 多个实例的主要内容,如果未能解决你的问题,请参考以下文章

使用 systemd 配置多个 MySQL 8.0 实例

集群中每个节点上的多个 Cassandra 实例

虚拟机的那个线程是不是需要每个线程有多个实例?

创建同一个 FileSystemWatcher 的多个实例

将多个 ebs 卷附加到每个 ec2 实例

sQL server 啥是实例?