Serilog 日志框架如何自动删除超过 N 天的日志 ?

共 1942字,需浏览 4分钟

 ·

2021-10-30 20:55


咨询区

  • 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 持谨慎态度,毕竟看过关于日志方面的坑都有它的踪影!



往期精彩回顾




【推荐】.NET Core开发实战视频课程 ★★★

.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

【.NET Core微服务实战-统一身份认证】开篇及目录索引

Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

10个小技巧助您写出高性能的ASP.NET Core代码

用abp vNext快速开发Quartz.NET定时任务管理界面

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

现身说法:实际业务出发分析百亿数据量下的多表查询优化

关于C#异步编程你应该了解的几点建议

C#异步编程看这篇就够了


浏览 65
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报