我想用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解决这个问题吗?
答案 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"
{#}
允许归档清理生成正确的文件通配符。${date:format=}
的{{1}}匹配(如果需要更改,请记住纠正这两种日期格式)fileName
会自动确保存档文件操作,因此我们不需要任何其他存档操作(例如,避免在午夜生成额外的空文件)。使用NLog 4.5(仍然在BETA中),这将更容易(因为只需要指定MaxArchiveFiles)。另请参阅https://github.com/NLog/NLog/pull/1993