archive - NLog 文件名中的日期和限制日志文件的数量

标签 archive nlog splunk

我想使用 NLog 实现滚动文件的以下行为:
1.防止在启动新文件时重命名或移动文件,并且
2. 限制旧日志文件的总数或大小以避免随着时间的推移出现容量问题

可以实现第一个要求,例如通过在文件名中添加时间戳,例如 ${shortdate}。示例:

logs\trace2017-10-27.log <-- today's log file to write   
logs\trace2017-10-26.log  
logs\trace2017-10-25.log  
logs\trace2017-10-24.log <-- keep only the last 2 files, so delete this one 

然而,根据其他帖子,不可能在文件名中使用日期和像 maxArchiveFiles 这样的存档参数。如果我使用 maxArchiveFiles,我必须保持日志文件名不变:

logs\trace.log <-- today's log file to write   
logs\archive\trace2017-10-26.log  
logs\archive\trace2017-10-25.log  
logs\archive\trace2017-10-24.log <-- keep only the last 2 files, so delete this one 

但在这种情况下,每天在第一次写入时,它会将昨天的跟踪移动到存档并开始一个新文件。

我想阻止移动跟踪文件的原因是因为我们使用 Splunk 日志监视器,它正在监视日志文件夹中的文件以进行更新,读取新行并将其提供给 Splunk。

我担心的是,如果我在 23:59:59.567 写入了一个事件,那么在 00:00:00.002 的下一个事件会在日志监视器能够在那几分之一秒内读取之前清除之前的内容。

老实说,我还没有测试过这种情况,因为设置起来会很复杂,因为我的团队没有 Splunk 等 - 所以如果这不可能发生,请纠正我。

另请注意,我知道可以通过网络连接等其他方式直接向 Splunk 提供数据,但我们公司当前的 Splunk 设置是从日志文件中读取,因此这样会更容易。

知道如何使用 NLog 解决这个问题吗?

最佳答案

使用 NLog 4.4(或更早版本)时,您必须进入万圣节模式并进行一些欺骗。

此示例在同一文件夹中生成每小时日志文件,并确保在 840 小时(35 天)后执行存档清理:

    fileName="${logDirectory}/Log.${date:format=yyyy-MM-dd-HH}.log"
    archiveFileName="${logDirectory}/Log.{#}.log"
    archiveDateFormat="yyyy-MM-dd-HH"
    archiveNumbering="Date"
    archiveEvery="Year"
    maxArchiveFiles="840"
  • archiveFileName - 使用 {#} 允许存档清理生成正确的文件通配符。
  • archiveDateFormat - 必须与 fileName${date:format=} 匹配(因此请记住更正两种日期格式,如果需要改变)
  • archiveNumbering=Date - 配置存档清理以支持将文件名解析为日期。
  • archiveEvery=Year - 激活存档清理,还有存档文件操作。因为配置的 fileName 自动确保归档文件操作,所以我们不需要任何额外的归档操作(例如,避免在午夜生成额外的空文件)。
  • ma​​xArchiveFiles - 保留多少存档文件。

使用 NLog 4.5(仍处于测试阶段),这会容易得多(因为只需要指定 MaxArchiveFiles)。另见 https://github.com/NLog/NLog/pull/1993

关于archive - NLog 文件名中的日期和限制日志文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978048/

相关文章:

Linux shell 脚本到 tar.gzip 日志文件超过 1 个月按月分组

windows - 在 Windows 上解压多部分 tarball

ios - 归档在 ios 中需要很多内存和更多时间吗

visual-studio-2010 - 哪些版本的 NLog 可以与 VS2010 RTM 一起使用?

c# - 将 Func 重铸为特定委托(delegate)

c# - 在子类中使用父类记录器

monitoring - Splunk 企业 : Exclude certain time ranges for a bigger time range

python - 解析 CSV 并根据行内容采取行动的最有效方法

Python 相当于将 POST 负载用单引号括起来

c++ - 使用 C++ 复制和存档/压缩文本文件