Different Minimum Level Logs Serilog

46,283

Solution 1

The setting you're looking for is restrictedToMinimumLevel. This GitHub issue shows some examples of this, but for your example, you just need to add restrictedToMinimumLevel to your Args for RollingFile:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "IsJson": true,
        "Args": {
          "pathFormat": "C:\\Logs\\Log-{Hour}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "restrictedToMinimumLevel": "Warning"
        }
      },
      {
        "Name": "Console"
      }
    ]
  },

Solution 2

In your configuration you have one Serilog logger, but you have 2 sinks. One of your sinks is RollingFile and the other is Console.

You can override (but only raise) the minimum logging level per sink, The argument is called restrictedToMinimumLevel.

Since you want to raise the minimum logging level from your logger's default Debug to Warning in your file sink, in your appsettings.json file, it would look like this:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "IsJson": true,
        "Args": {
          "pathFormat": "C:\\Logs\\Log-{Hour}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "restrictedToMinimumLevel": "Warning"
        }
      },
      {
        "Name": "Console"
      }
    ]
  },

Solution 3

Working from the answers above, this is how I set it up in code as opposed to config

LoggerConfiguration GetConfig()
                => new LoggerConfiguration()
                    .WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
                    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error);
            var logger = GetConfig().CreateLogger();
            builder.RegisterInstance(logger).As<ILogger>();

After I did this, it worked for log level Information and above. Debug didn't work. This post explained why.

I had to set a 'global' minimum level like this.

LoggerConfiguration GetConfig()
            => new LoggerConfiguration()
                .WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
                .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error)
                .MinimumLevel.Verbose();
Share:
46,283
jollyroger23
Author by

jollyroger23

Updated on August 25, 2020

Comments

  • jollyroger23
    jollyroger23 over 3 years

    Is there a way to differentiate what level is logged between the different loggers for Serilog? I want to be able to log MinimumLevel Debug to the console output but only Warning and above to my file output. I am using ASP.NET Core 2.1 and this is what the appsetting.json currently looks like:

    "Serilog": {
        "Using": [ "Serilog.Sinks.Console" ],
        "MinimumLevel": "Debug",
        "WriteTo": [
          {
            "Name": "RollingFile",
            "IsJson": true,
            "Args": {
              "pathFormat": "C:\\Logs\\Log-{Hour}.json",
              "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
            }
          },
          {
            "Name": "Console"
          }
        ]
      },
    

    Is it something like another parameter under "Args"? I've tried "minimumnLevel" in this location but it did not work.