Serilog `rollOnFileSizeLimit` 不适用于配置文件

mos*_*aka 8 c# serilog .net-core

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": {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Serilog这是我告诉从配置中读取的代码:

{
  "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": {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当文件大小达到 10KB 时,它会停止增长,并且不会创建新的日志文件。顺便说一句,白天滚动仍然有效。

我也通过Serilog代码配置验证了,它有效,所以我认为它与sink无关......

这是有效的代码

//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();
                })
Run Code Online (Sandbox Code Playgroud)

那么当配置文件达到文件大小时,如何让 Serilog 创建滚动文件呢?

mos*_*aka 10

我下载并用Serilog.Settings.Configuration源码调试,发现我这里犯了一个愚蠢的错误。配置文件中的无效参数名称有一个额外的空格。

"rollOnFileSizeLimit ": true,
"retainedFileCountLimit ": 20,
Run Code Online (Sandbox Code Playgroud)

应该

"rollOnFileSizeLimit": true,
"retainedFileCountLimit": 20,
Run Code Online (Sandbox Code Playgroud)

纠正此问题后,一切正常。

我想也许该项目应该在匹配键之前修剪空格......