添加Serilog子记录器以限制进入日志聚合器的数据

时间:2017-07-06 21:13:21

标签: serilog

我需要通过仅包含特定上下文数据的子记录器发送数据。在这种情况下,我非常希望忽略消息模板中的所有内容(文本本身除外)并传递已由enrichers和PushContext语句添加的关键上下文数据。这主要是为了创建一个保持一致的仪表板视图。

LevelSwitch = new LoggingLevelSwitch { MinimumLevel = LogLevelSerilog.Verbose };

Log.Logger = new LoggerConfiguration()
.MinimumLevel.ControlledBy(LevelSwitch)
.Enrich.With<CorrelationIdEnricher>()
.Enrich.With<ThreadIdEnricher>()
.Enrich.FromLogContext()
.WriteTo.Seq("http://localhost/Response")
// Filter to a sublogger for instrumentation...
.WriteTo.Logger(lc => lc.MinimumLevel.Information()
                        .WriteTo.Seq("http://localhost/Public")
                        .Filter.ByIncludingOnly(q => q.Properties.ContainsKey("Controller") 
                                                    || q.Properties.ContainsKey("Action")
                                                    || q.Properties.ContainsKey("Class")
                                                    || q.Properties.ContainsKey("Method")
                                                    || q.Properties.ContainsKey("Organization")
                                                    || q.Properties.ContainsKey("OrganizationId")
                                                    || q.Properties.ContainsKey("CorrelationId")))
.CreateLogger();

为什么这不是向子记录器发送任何事件的任何想法? (想出来)

为什么我从主记录器中获取所有内容(每个级别允许)?我希望过滤器减少进入子记录器的数据量。即:我只想将过滤后的数据转到子记录器。任何添加的数据都应该从日志中删除。

1 个答案:

答案 0 :(得分:1)

外部记录器需要至少启用Information级别才能使其正常工作 - 如果LevelSwitch设置为WarningError,则可以解释没有事件到达子记录器。