Serilog配置疑问:如何让最新日志始终保留在trace.log
Serilog日志滚动配置:让最新日志始终保留在主文件
要实现最新日志始终写入trace.log,旧日志自动备份为带序号/日期的文件,你可以按以下方式调整配置:
1. 确保使用新版Serilog.Sinks.File
旧版本(v3.0之前)的Serilog文件接收器滚动逻辑是反向的:达到大小限制后,新日志会写入带序号的文件,主文件留存旧日志。升级到v3.0及以上版本后,默认逻辑改为:将旧的主文件重命名为备份文件,新日志继续写入新的主文件。
2. 调整配置参数
根据你的滚动需求选择对应配置:
仅按文件大小滚动
如果不需要按天分割日志,只按文件大小滚动,将rollingInterval设为"Infinite":
"WriteTo": [ { "Name": "File", "Args": { "path": "%BASEDIR%/trace.log", "shared": true, "rollingInterval": "Infinite", "rollOnFileSizeLimit": true, "fileSizeLimitBytes": 1048576, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{MachineName}_{Tenant}] [{EnvironmentUserName}] [{ProcessId}] [{Guid}] [{ClassName}.{MethodName}] {Message:lj}{NewLine}{Exception}" } } ]
达到大小限制时,trace.log会被重命名为trace_001.log,新日志继续写入新的trace.log。
按天+大小混合滚动
如果需要每天分割日志,同时当天内按大小滚动,保留rollingInterval: "Day"即可:
"WriteTo": [ { "Name": "File", "Args": { "path": "%BASEDIR%/trace.log", "shared": true, "rollingInterval": "Day", "rollOnFileSizeLimit": true, "fileSizeLimitBytes": 1048576, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{MachineName}_{Tenant}] [{EnvironmentUserName}] [{ProcessId}] [{Guid}] [{ClassName}.{MethodName}] {Message:lj}{NewLine}{Exception}" } } ]
- 每天零点,前一天的
trace.log会被重命名为trace_YYYYMMDD.log(比如trace_20240520.log) - 当天内达到大小限制时,当前
trace.log会被重命名为trace_YYYYMMDD_001.log,新日志继续写入trace.log
3. 修正配置语法错误
你原配置中outputTemplate末尾多了一个逗号,会导致配置解析失败,记得删除这个多余的逗号。
内容的提问来源于stack exchange,提问作者Natchatra
相关产品推荐
相关产品推荐

