c# - Serilog `rollOnFileSizeLimit` 不适用于配置文件

标签 c# .net-core serilog

配置时Serilog通过配置文件(使用 nuget 包 Serilog.Settings.Configuration ),当达到大小限制时,它不会创建滚动日志文件。

正如 this question 中所建议的和 this issue ,我正在使用 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();
                })

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

我也通过配置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 创建滚动文件?

最佳答案

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

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

应该
          "rollOnFileSizeLimit": true,
          "retainedFileCountLimit": 20,

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

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

关于c# - Serilog `rollOnFileSizeLimit` 不适用于配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767502/

相关文章:

serilog - 有没有办法在 EventLog 接收器上设置事件 ID(在 Serilog 中)?

c# - 配置 NServiceBus 以记录导致消息重试的异常

c# - 如何从Azure AD获取asp net core 2.0 JwtBearer token 中的 key 名称

asp.net - 在单独的 Docker 容器中使用数据库时添加迁移会引发错误

c# - NET Core 2.0读取文件添加为资源

c# - Elasticsearch无法搜索字符串字段

Serilog 内存接收器

C# 运算符重载不起作用

c# - 使用 MVC3 以相同的形式上传多个图像

c# - 使用尾随空格格式化字符串