Serilog returnedFileTimeLimit .net 6 不起作用

问题描述 投票:0回答:1

我试图定期清除日志文件。因此,在 serilog.sink.file v5.0.0 中搜索时,我发现了一个名为 returnedFileTimeLimit 的东西,我尝试了它,但它不起作用。

这是我的代码->

 static void Main(string[] args)
 {
     var _loggger = new LoggerConfiguration()
         .WriteTo.File(
          new JsonFormatter(),
         filePath, 
         Serilog.Events.LogEventLevel.Information,
         retainedFileTimeLimit: TimeSpan.FromMinutes(2),
         fileSizeLimitBytes: 10000,
         rollOnFileSizeLimit: true,
         retainedFileCountLimit: 40,
         flushToDiskInterval: TimeSpan.FromSeconds(1),
         rollingInterval: RollingInterval.Day
         )
         .CreateLogger();

     for ( int i = 0; i < 20; i++ )
     {
         _loggger.Information("Logging Info");
         _loggger.Warning("Logging Warning");
     }
 }

一旦达到 fileSizeLimitBytes: 10000,它就会删除文件并创建一个新文件,即使我仍在 10 分钟的时间范围内,并且保留的 FileCountLimit: 50 和 movingInterval: RollingInterval.Day。

但是,当我设置retainedFileTimeLimit: TimeSpan.FromDays(10)时,一旦文件大小超出限制,它就会创建一个新文件,并且不会删除旧文件。


我到处搜索这个问题,但除了这个 GitHub 问题

,我没有找到任何东西
.net logging serilog serilog-sinks-file
1个回答
0
投票

在serilog src中,您可以找到一个调用“ShouldRetainFile”的方法,该方法过滤要删除的日志文件。它必须是“index >= _retainedFileCountLimit.Value - 1”和“file.DateTime.Value < now.Subtract(_retainedFileTimeLimit.Value)"

bool ShouldRetainFile(RollingLogFile file, int index, DateTime now)
{
    if (_retainedFileCountLimit.HasValue && index >= _retainedFileCountLimit.Value - 1)
        return false;

    if (_retainedFileTimeLimit.HasValue && file.DateTime.HasValue &&
        file.DateTime.Value < now.Subtract(_retainedFileTimeLimit.Value))
    {
        return false;
    }

return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.