NLog自動刪除日志
.Net6(.Net Core 6)的項目使用NLog記錄日志,在一次測試服務器,服務構建后無法啟動,經過查找原因發現是NLog記錄日志占用磁盤240G導致磁盤空間不夠,於是
經過查找發現NLog.config的一個路由規則導致的如下:
問題一
<logger name="*" minlevel="Info" writeTo="logfile" />
這個規則導致所有Info信息類型的消息,全部都會被寫入日志文件中,包括EFCore自帶的生成的sql語句日志,都會被寫入日志文件中如圖:
解決辦法:
修改后的代碼
<logger name="Microsoft.*" minlevel="Info" writeTo="logfile" final="true" />
命名空間Microsoft下所有類的、級別在Info的 日志信息都不會被記錄,同時其它后續規則也都會被忽略(因為這里設置了final="true"),自己記錄的日志會被記錄如:
_logger.LogInformation("我的Info日志");
問題二
解決了問題一,還不夠。雖然系統日志不會被記錄,只記錄自定義日志,但是記錄的日志隨着時間增加,日志文件所占磁盤空間仍然會不斷變大,
所以主題來了"NLog自動刪除日志"
配置如下:
簡要說明兩個參數: maxArchiveDays:7 保留七天內的日志、maxArchiveFiles=10 保留文檔最大數量為10。保留最近七天的十個日志文件,其他日志文件自動刪除。
GitHub上NLog參考文檔 : https://github.com/NLog/NLog/wiki/File-target
解決辦法:
修改后加入代碼
maxArchiveDays="7" maxArchiveFiles="10"