Filtering Serilog output for EF Core 3.1

Viewed 1264

I've problems in filtering the output of serilog in an asp.net core 3.1 application.

Here is a part of the serilog configuration in appsettings.json:

    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Async", "Serilog.Sinks.MSSqlServer", "Serilog.Filters.Expressions" ],
    "MinimumLevel": "Debug",
    "Enrich": [
      "FromLogContext"
    ],
    "WriteTo:SubloggerConsole": {
      "Name": "Console"
    },
    "WriteTo:SubloggerFile": {
      "Name": "Async",
      "Args": {
        "configure": [
          {
            "Name": "File",
            "Args": {
              "restrictedToMinimumLevel": "Information",
              "path": "%TEMP%/Logs/DbCommands.Log",
              "rollingIntervall": "Day",
              "retainedFileCountLimit": 2
            },
            "Filter": [
              {
                "Name": "DbLoggerCategory.Database.Command.Name"
              },
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "Contains(@Message, 'UPDATE') or Contains(@Message, 'INSERT')"
                }
              }
            ]
          }
        ]
      }
    }

Part of program.cs

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => {
              webBuilder
              .UseStartup<Startup>()
              .CaptureStartupErrors(true)
              .UseSetting("detailedErrors", "true")
              .ConfigureAppConfiguration(config => {
                config.AddJsonFile("appsettings.Local.json", optional: true);
              });
            }).UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
              .ReadFrom.Configuration(hostingContext.Configuration)
            );

Part of startup.cs

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, ILoggerFactory loggerFactory) {
      if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
      } else {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
      }
      app.UseHsts();

      loggerFactory.AddSerilog();

Part of context file

  public class FristentoolContext : DbContext {
    private readonly ILoggerFactory _loggerFactory;

    public FristentoolContext(DbContextOptions<FristentoolContext> options, ILoggerFactory loggerFactory)
        : base(options) {
      _loggerFactory = loggerFactory;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
      optionsBuilder.UseLoggerFactory(_loggerFactory);
    }

Logging to the file is working but without any filter.

The more i try to get information from internet, the dizzier i get. There always seems to be 10 approaches to solve 1 problem, so any help is appreciated.

Thanks in advance Matt

0 Answers
Related