天天看點

Serilog 日志架構如何自動删除超過 N 天的日志 ?

咨詢區

  • JohnB:

我的程式使用的日志架構是 Serilog,我是按天分割日志檔案的,由于每日檔案都比較大,我經常手工删除,但這樣做很傻,請問日志架構有沒有自動幫我删除 N 天之間的日志呢?

回答區

  • somethingRandom:

根據官方文檔:​

​https://github.com/serilog/serilog-sinks-file/blob/dev/README.md#limits​

​ ,預設保留檔案個數是 retainedFileCountLimit =31,這就意味着最多保留最近的31個檔案,當然你也可以手工去修改,參考如下代碼:

var log = new LoggerConfiguration()
    .WriteTo.File("log.txt", retainedFileCountLimit:= 42)
    .CreateLogger();
      

如果不想限制檔案個數,可以設定:​

​retainedFileCountLimit = null​

​ 。

除了寫死,還可以通過 xml 進行配置。

<appSettings>
<add key="serilog:using:File" value="Serilog.Sinks.File" />
<add key="serilog:write-to:File.path" value="log.txt" />
<add key="serilog:write-to:File.retainedFileCountLimit" value="42"/>
</appSettings>      

當然如何你的程式時 .NET Core 的話,可在 appsetting.json 中做如下配置:

{
  "Serilog": {
    "WriteTo": [
      { "Name": "File", "Args": { "path": "log.txt", "retainedFileCountLimit": "42" } }
    ]
  }
}      
  • mihails.kuzmins:

Serilog 非常靈活,即可以按天自動建立日志檔案,還可以設定最多保留多少個檔案,參考配置。

{
    "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "App_Data\\Logs\\app_.log",
          "rollingInterval": "Day",
          "fileSizeLimitBytes": "52428800",
          "rollOnFileSizeLimit": "true",
          "retainedFileCountLimit": "100",
          "retainedFileTimeLimit": "7.00:00:00", //Deletes files older than 7 days
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ]
  },
}
      

更多細節,參見。

  • https://github.com/serilog/serilog-sinks-file/pull/90
  • https://github.com/serilog/serilog-sinks-rollingfile/blob/dev/README.md

點評區

.NET 有太多的日志架構,比如:nlog,log4net,其實我個人對 Serilog 持謹慎态度,畢竟看過關于日志方面的坑都有它的蹤影!

——————————