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

时间:2019-06-26 07:31:23

标签: c# .net-core serilog

通过配置文件(带有nuget软件包Serilog)配置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进行了验证,它可以正常工作,因此我认为它与接收器无关...

这是有效的代码

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

2 个答案:

答案 0 :(得分:0)

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

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

应该是

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

更正此错误后,一切正常。

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

答案 1 :(得分:0)

输入时请小心。以前,您添加了分号,但是它不是这样编译的:

<img id="displaypic" src="none" alt="3-picture slideshow" />