Serilog - RollingFile Sink 不会根据日期和大小滚动文件

use*_*538 7 c# serilog rollingfilesink

我正在使用 Serilog - RollingFile Sink,但它将所有数据存储在一个文件中一天。在我的应用程序中,一天写入 1 GB 日志。所以我想根据日期和大小滚动日志文件。

如何配置 RollingFile Sink 以根据日期和大小滚动文件?

vic*_*710 9

现在 Serilog.Sinks.RollingFile 包已被弃用,取而代之的是 Serilog.Sinks.File(参见 github 项目自述文件介绍)。Serilog.Sinks.File 包已升级以支持文件滚动。您可以使用以下 Serilog 配置来启用按时间和大小滚动:

"Serilog": {
    "Using": ["Serilog.Sinks.File"],
    "MinimumLevel": "Debug",
    "WriteTo": [
        {
            "Name": "File",
            "Args": {
                "path": "logs/log.txt",
                "rollingInterval": "Day",
                "rollOnFileSizeLimit": true,
                "fileSizeLimitBytes": "512",
                "retainedFileCountLimit": 3,
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
            }
        }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

然后你会得到这样的东西:

在此处输入图片说明


Pat*_*ele 3

文档中:

为了避免因磁盘使用失控而导致应用程序崩溃,滚动文件接收器默认将文件大小限制为 1GB。可以使用 fileSizeLimitBytes 参数更改或删除该限制。

.WriteTo.RollingFile("log-{Date}.txt", fileSizeLimitBytes: null)
Run Code Online (Sandbox Code Playgroud)

该示例显示通过将其设置为 来删除限制null。根据您的情况,将其设置为适当的大小。

更新

是的,根据您的评论,我查看了源代码,看起来 RollingFileSink 的最低计量单位是一天,因此似乎不支持在同一天有多个。然而,我没有仔细观察,看起来RollingFileSink.csOpenFile中的方法对序列号做了一些处理。您可能想看一下该代码正在做什么。

  • fileSizeLimitBytes 确保文件的大小。这意味着达到此限制后记录将停止。达到此限制后不会创建新文件。 (3认同)