首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog `rollOnFileSizeLimit`不适用于配置文件

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

Stack Overflow用户
提问于 2019-06-26 15:31:23
回答 2查看 3.4K关注 0票数 4

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

按照this questionthis issue中的建议,我使用的是Serlog.Sinks.File (版本4.0.0),但没有创建滚动文件。

这是我的serilog配置文件appsettings.json

代码语言:javascript
复制
{
  "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从配置中读取的代码:

代码语言:javascript
复制
//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进行了验证,它可以工作,所以我认为它与接收器无关……

这是可以工作的代码

代码语言:javascript
复制
 .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创建滚动文件?

EN

回答 2

Stack Overflow用户

发布于 2019-06-28 16:21:38

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

代码语言:javascript
复制
          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": 20,

应该是

代码语言:javascript
复制
          "rollOnFileSizeLimit": true,
          "retainedFileCountLimit": 20,

在纠正这个错误之后,一切都会正常工作。

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

票数 4
EN

Stack Overflow用户

发布于 2020-10-07 03:49:33

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

代码语言:javascript
复制
loggerConfiguration
    .ReadFrom.Configuration(hostingContext.Configuration)**;**
    .WriteTo.Console();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56767502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档