public void WhenTheFilterExpressionIsModifiedTheFilterChanges() { var @switch = new LoggingFilterSwitch(); var sink = new CollectingSink(); var log = new LoggerConfiguration() .Filter.ControlledBy(@switch) .WriteTo.Sink(sink) .CreateLogger(); var v11 = Some.InformationEvent("Adding {Volume} L", 11); log.Write(v11); Assert.Same(v11, sink.SingleEvent); sink.Events.Clear(); @switch.Expression = "Volume > 12"; log.Write(v11); Assert.Equal(0, sink.Events.Count); @switch.Expression = "Volume > 10"; log.Write(v11); Assert.Same(v11, sink.SingleEvent); sink.Events.Clear(); @switch.Expression = null; log.Write(v11); Assert.Same(v11, sink.SingleEvent); }
/// <summary> /// Use a <see cref="LoggingFilterSwitch"/> to dynamically control filtering. /// </summary> /// <param name="loggerFilterConfiguration">Filter configuration.</param> /// <param name="switch">A <see cref="LoggingFilterSwitch"/> that can be used to dynamically control /// log filtering.</param> /// <returns>The underlying <see cref="LoggerConfiguration"/>.</returns> public static LoggerConfiguration ControlledBy(this LoggerFilterConfiguration loggerFilterConfiguration, LoggingFilterSwitch @switch) { if (loggerFilterConfiguration == null) { throw new ArgumentNullException(nameof(loggerFilterConfiguration)); } if (@switch == null) { throw new ArgumentNullException(nameof(@switch)); } return(loggerFilterConfiguration.With(@switch)); }