Serilog配置retainedFileCountLimit不生效,如何仅保留最近7天日志文件
Serilog 保留最近7天日志配置方案
配置不生效原因
你当前设置的retainedFileCountLimit未生效,是因为你手动在日志文件路径中拼接了DateTime.Now.ToString("yyyyMMdd")日期字符串。Serilog的文件滚动清理逻辑只会对同一个基础文件名自动生成的滚动系列文件做识别计数,手动指定带动态日期的固定路径后,Sink无法将历史生成的日志文件识别为同一系列,自然不会触发清理逻辑。
正确配置方式
你不需要手动拼接日期到路径中,当你设置rollingInterval: RollingInterval.Day时,Serilog会自动在文件名后拼接对应日期后缀,最终生成的文件名格式和你手动拼接的完全一致。
如果要严格保留最近7天的日志,更推荐使用retainedFileTimeLimit参数直接按时间清理,避免单日多文件导致retainedFileCountLimit计数偏差的问题,配置示例如下:
// Add Serilog string logBasePath = HostingEnvironment.MapPath(@"~/new_.log"); Log.Logger = new LoggerConfiguration() .WriteTo.File( path: logBasePath, // 按时间保留:直接指定保留最近7天的日志,超出时间的自动清理 retainedFileTimeLimit: TimeSpan.FromDays(7), // 如果你仍要按文件数量保留,保留7份则设置为7即可 // retainedFileCountLimit: 7, shared: true, rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: 123456, flushToDiskInterval: TimeSpan.FromSeconds(5)) .CreateLogger(); Log.Information("Starting Serilog #1");
注意:
retainedFileTimeLimit参数需要Serilog.Sinks.File NuGet包版本在v2.2.0及以上才支持,如版本较低请先升级包。
完整配置属性查看渠道
Serilog各个Sink的所有配置属性说明,可以直接在IDE中查看对应方法的智能提示注释,也可以查看对应Sink的官方说明文档,包含所有参数的作用、取值要求、生效条件等完整信息。
内容的提问来源于stack exchange,提问作者Sonnich Jensen
相关产品推荐
相关产品推荐

