Serilog `rollOnFileSizeLimit` не работает с файлом конфигурации - PullRequest
0 голосов
/ 26 июня 2019

При настройке Serilog с помощью файла конфигурации (с пакетом nuget Serilog.Settings.Configuration) он не создает скользящий файл журнала при достижении предельного размера.

Как предложено в в этом вопросе и в этом выпуске , я использую Serlog.Sinks.File (версия 4.0.0), но скользящий файл не создается.

Это мой конфигурационный файл Serilog appsettings.json:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.File",
      "Serilog.Sinks.Console"
    ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "%LogPath%\\Logs\\log.txt",
          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": 20,
          "rollingInterval": "Day",
          "fileSizeLimitBytes": 10000
        }
      },
      {
        "Name": "Console"
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName" ],
    "Destructure": [
    ],
    "Properties": {
    }
  }
}

Это код, который я говорю Serilog для чтения из конфигурации:

//previous code ommited... 
.ConfigureAppConfiguration((hostContext, configApp) =>
                {
                    Environment.SetEnvironmentVariable("LogPath", AppDomain.CurrentDomain.BaseDirectory);
                    configApp.AddJsonFile("appsettings.json", optional: false);

                    configApp.AddEnvironmentVariables();
                    configApp.AddCommandLine(args);
                })
                .UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration
                        .ReadFrom.Configuration(hostingContext.Configuration);
                         .WriteTo.Console();
                })

Когда размер файла достигает 10 КБ, он перестает расти, и новый файл журнала не создается. Кстати, прокат по дням все еще работает.

Я также проверил, настроив Serilog по коду, и он работает, так что я думаю, что это не связано с приемником ...

Это код, который работает

 .UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration.MinimumLevel.Debug()
                            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                            .Enrich.FromLogContext()
                            .WriteTo.File(path: Path.Combine(Environment.CurrentDirectory, "Logs", "log.txt"),
                                rollOnFileSizeLimit: true,
                                retainedFileCountLimit: 20,
                                rollingInterval: RollingInterval.Day,
                                fileSizeLimitBytes: 10000
                                )
                            .WriteTo.Console();
                })

Так, как я мог заставить Serilog создавать скользящий файл, когда размер файла был достигнут файлом конфигурации?

1 Ответ

0 голосов
/ 28 июня 2019

Я скачал и отладил исходный код Serilog.Settings.Configuration и обнаружил, что допустил глупую ошибку.Имя параметра без эффекта в файле конфигурации имеет дополнительный пробел.

          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": 20,

должно быть

          "rollOnFileSizeLimit": true,
          "retainedFileCountLimit": 20,

После исправления этого все работает.

Iпредположим, что, возможно, проект должен обрезать пробелы перед соответствием клавиш ...

...