serilog-aspnetcore icon indicating copy to clipboard operation
serilog-aspnetcore copied to clipboard

Configuration on json Appsettings not filtering the levels.

Open alexmbra opened this issue 2 years ago • 0 comments

Description When I use filters from code, it works. But when I try to use them on the configuration on json Appsettings file, it does not filter anything. It writes everything on all log files.

Reproduction This works:

var logger = new LoggerConfiguration()
               .MinimumLevel.Debug()
               .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
               .Enrich.FromLogContext()
               .WriteTo.Logger(
                   x => x.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
                       .WriteTo.File("../logs/error_.log", formatProvider: CultureInfo.InvariantCulture, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 30)
               )
               .WriteTo.Logger(
                   x => x.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning)
                       .WriteTo.File("../logs/warning_.log", formatProvider: CultureInfo.InvariantCulture, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 30)
               )
               .WriteTo.File("../logs/all_.log", formatProvider: CultureInfo.InvariantCulture, rollingInterval: RollingInterval.Day, retainedFileCountLimit: 30)
               .WriteTo.Console(formatProvider: CultureInfo.InvariantCulture)
               .CreateLogger();

           builder.Logging.AddSerilog(logger);

But this does not:

var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

            var logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();

            builder.Logging.AddSerilog(logger);


      },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filters": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "(@Level = 'Warning')"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "../logs/warning_.log",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 30,
                  "outputTemplate": "{Timestamp:o} [{Level:u3}] ({SourceContext}) {Message}{NewLine}{Exception}"
                }
              }
            ]
          }
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "../logs/all_.log",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 30,
          "outputTemplate": "{Timestamp:o} [{Level:u3}] ({SourceContext}) {Message}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": [
      "FromLogContext"
    ],
    "Properties": {
      "Application": "MultipleLogFilesSample"
    }
  }

Expected behavior Both codes are suppost to filter the log entries by level and write them into the respective files.

Relevant package, tooling and runtime versions What Serilog version are you using, on what platform? Visual Studio 2022 with nuget\packages\serilog.aspnetcore\7.0.0

alexmbra avatar Jul 11 '23 00:07 alexmbra