示例#1
0
        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));
        }