我想通过NLog实现以下滚动文件的行为:
第一个要求可以实现,例如,在文件名中添加像${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解决这个问题吗?
发布于 2017-10-27 17:39:13
当使用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"{#}允许归档清理生成正确的文件通配符。fileName的${date:format=}匹配(因此,如果需要更改,请记住纠正这两种日期格式)fileName自动确保归档文件操作,所以我们不需要任何额外的归档操作(Ex )。避免在午夜生成额外的空文件)。使用NLog 4.5 (仍然处于BETA版),它将变得容易得多(因为只需指定MaxArchiveFiles)。另见https://github.com/NLog/NLog/pull/1993
https://stackoverflow.com/questions/46978048
复制相似问题