Kristian Sik
Kristian Sik

Reputation: 163

Overriding MinimumLevel doesn't work in Serilog

Trying to set minimum log level for Serilog 2.8.0 (in .NET 4.6.2). Logging is working fine, but not the Override feature.

Here is my Program.cs:

using System;
using LogTest1.Classes;
using Microsoft.Extensions.Configuration;
using Serilog;
using SomeLib;


namespace LogTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", false, true)
                .Build();

            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();

            Log.Verbose("Verbose");
            Log.Debug("Debug");
            Log.Information("Information");
            Log.Warning("Warning");
            Log.Error("Error");
            Log.Fatal("Fatal");

            Console.ReadKey();
        }
    }
}

And the appsettings.json file:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "LogTest": "Information"
      }
    },
    "WriteTo": [
      { "Name": "Console" }
    ]
  }
}

Expected to see all the logs, starting from Information, but instead got only from Warning.

Upvotes: 15

Views: 22126

Answers (1)

C. Augusto Proiete
C. Augusto Proiete

Reputation: 27818

You are overriding the MinimumLevel only for log messages sent from a SourceContext with the name LogTest, as per your configuration....

"Override": {
  "LogTest": "Information"
}

A simple call to Log.Information("Information") like you're doing will not have the source context set, therefore the override doesn't apply... You have to create the context first.

var contextLog = Log.ForContext("SourceContext", "LogTest");
contextLog.Information("This shows up because of the override!");
contextLog.Information("... And this too!");

Log.Information("This does **not** show, because SourceContext != 'LogTest'");

You can read more about SourceContext in the documentation: https://github.com/serilog/serilog/wiki/Writing-Log-Events#source-contexts

Upvotes: 23

Related Questions