Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 591
Kristian Sik Avatar asked Dec 13 '22 10:12

Kristian Sik


1 Answers

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

like image 199
C. Augusto Proiete Avatar answered Dec 21 '22 22:12

C. Augusto Proiete