我试图定期清除日志文件。因此,在 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 问题
,我没有找到任何东西在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;
}