NLog文件名中的日期并限制日志文件的数量

时间:2017-10-27 15:00:38

标签: 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的下一个事件将清除之前的内容,然后日志监视器才能在一秒钟内读取它。 / p>

说实话,我没有测试过这种情况,因为设置起来很复杂,因为我的团队没有拥有Splunk等等 - 所以如果不能这样做,请纠正我。

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

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

1 个答案:

答案 0 :(得分:0)

当使用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 - 必须与${date:format=}的{​​{1}}匹配(如果需要更改,请记住纠正这两种日期格式)
  • archiveNumbering = Date - 配置存档清理以支持将文件名解析为日期。
  • archiveEvery = Year - 激活归档清理,还激活归档文件操作。由于配置的fileName会自动确保存档文件操作,因此我们不需要任何其他存档操作(例如,避免在午夜生成额外的空文件)。
  • maxArchiveFiles - 要保留多少个存档文件。

使用NLog 4.5(仍然在BETA中),这将更容易(因为只需要指定MaxArchiveFiles)。另请参阅https://github.com/NLog/NLog/pull/1993