【问题标题】:Serilog `rollOnFileSizeLimit` doesn't work with configuration fileSerilog `rollOnFileSizeLimit` 不适用于配置文件
【发布时间】:2022-01-05 15:57:06
【问题描述】:

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

按照this questionthis 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进行了验证,确实有效,所以我认为和sink没有关系...

这是有效的代码

 .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 创建滚动文件?

【问题讨论】:

  • 为什么"fileSizeLimitBytes": "10000" 10000 在引号中?
  • @FaizanHussainRabbani tks。我已经测试过删除引号,但仍然是同样的问题。另外我猜serilog 可以识别引号中的数字,因为它会生效..

标签: c# .net-core serilog


【解决方案1】:

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

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

应该是

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

改正后,一切正常。

我认为项目可能应该在匹配键之前修剪空格...

【讨论】:

    【解决方案2】:

    打字时要小心。以前你添加一个分号,它不会这样编译:

    loggerConfiguration
        .ReadFrom.Configuration(hostingContext.Configuration)**;**
        .WriteTo.Console();
    

    【讨论】:

    • 此信息不能回答问题,而是应作为注释注明或省略。想法是所有“答案”都可能是对最初问题的答案,在 cmets 中进行讨论和澄清。如果您有另一个 StackExchange,您可以链接它们以克服声誉要求以发表评论。话虽如此,感谢您抽出宝贵时间提供帮助:)
    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多