title: How can I override Serilog levels differently for different sinks?
body: <p>My scenario is: a file sink should contain everything. Another sink should contain Information messages, with the caveat that Microsoft.* messages are annoying so those should be limited to Warning only. How can the two sinks be configured separately? The first thing I tried was:</p>
  
  <pre><code>string outputTemplate = "[{Level:u3}] {SourceContext}: {Message:lj}{NewLine}";
  
  Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Verbose()
      .WriteTo.File("Logs/all.log", outputTemplate: outputTemplate)
  
      .MinimumLevel.Information()
      .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
      .WriteTo.File("Logs/some.log", outputTemplate: outputTemplate)
      .CreateLogger();
  
  var msLogger = Log.Logger.ForContext(Constants.SourceContextPropertyName, "Microsoft.AspNet.Example");
  var logger = Log.Logger.ForContext(Constants.SourceContextPropertyName, "MyClass");
  
  msLogger.Verbose("example log; should not go in the minimal file");
  msLogger.Information("example log; should not go in the minimal file");
  msLogger.Warning("example log");
  logger.Verbose("example log; should not go in the minimal file");
  logger.Information("example log");
  </code></pre>
  
  <p>In this case, both log files are selective and "all.log" does not contain all log messages. Next, I tried to accomplish this with sub-loggers:</p>
  
  <pre><code>Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Verbose()
      .WriteTo.File("Logs/all.log", outputTemplate: outputTemplate)
  
      .WriteTo.Logger(lc =&gt; lc
          .MinimumLevel.Information()
          .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
          .WriteTo.File("Logs/some.log", outputTemplate: outputTemplate))
          .CreateLogger();
  </code></pre>
  
  <p>This config works better, but the smaller log file still contains this line which should have been blocked by the <code>.MinimumLevel.Override()</code> option:</p>
  
  <pre><code>[INF] Microsoft.AspNet.Example: example log; should not go in the minimal file
  </code></pre>
  
  <p>Using a filter actually works, but I prefer the simple syntax so it's easier to configure.</p>
  
  <pre><code>Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Verbose()
      .WriteTo.File("Logs/all.log", outputTemplate: outputTemplate)
  
      .WriteTo.Logger(lc =&gt; lc
          .MinimumLevel.Information()
          .Filter.ByExcluding(logEvent =&gt;
              logEvent.Level &lt; LogEventLevel.Warning &amp;&amp;
              Matching.FromSource("Microsoft").Invoke(logEvent))
          .WriteTo.File("Logs/some.log", outputTemplate: outputTemplate))
          .CreateLogger();
  </code></pre>
  
  <p>Is this a bug? Why do filters work but setting the minimum level doesn't?</p>