NLog自动删除日志,设置保留一周内日志
NLog自动删除日志
.Net6(.Net Core 6)的项目使用NLog记录日志,在一次测试服务器,服务构建后无法启动,经过查找原因发现是NLog记录日志占用磁盘240G导致磁盘空间不够,于是
经过查找发现NLog.config的一个路由规则导致的如下:
问题一
<logger name="*" minlevel="Info" writeTo="logfile" />
这个规则导致所有Info信息类型的消息,全部都会被写入日志文件中,包括EFCore自带的生成的sql语句日志,都会被写入日志文件中如图:

解决办法:
修改后的代码
<logger name="Microsoft.*" minlevel="Info" final="true" />
final: 最终规则匹配后不处理任何规则
命名空间Microsoft下所有类的、最小级别在Info的日志信息都不会被记录,由于此路由没有writeTo属性,同时其它后续规则也都会被忽略(因为这里设置了final="true"),自己记录的日志会被记录如:
_logger.LogInformation("我的Info日志");
问题二
解决了问题一,还不够。虽然系统日志不会被记录,只记录自定义日志,但是记录的日志随着时间增加,日志文件所占磁盘空间仍然会不断变大,
所以主题来了"NLog自动删除日志"
配置如下:

警告: fileName="${basedir}/Nlogs/${level}s/${shortdate}${level}.log" 下生效,其它路径需要自行测试
简要说明两个参数: maxArchiveDays:7 保留七天内的日志、maxArchiveFiles=10 保留文档最大数量为10。保留最近七天的十个日志文件,其他日志文件自动删除。
另外还有一个参数: archiveAboveSize: 日志文件将自动存档的大小(以字节为单位), archiveAboveSize(存档大小)没有达到,不会删除旧日志文件
若想及时生效设置 archiveEvery="Minute" 每分钟存档一次
GitHub上NLog参考文档 : https://github.com/NLog/NLog/wiki/File-target

解决办法:
修改后加入代码
maxArchiveDays="7" maxArchiveFiles="10"

浙公网安备 33010602011771号