NLog 不会删除旧文件

Posted

技术标签:

【中文标题】NLog 不会删除旧文件【英文标题】:NLog is not deleting old files 【发布时间】:2021-12-01 19:11:46 【问题描述】:

我有下面的 NLog (4.7.11) 配置,它每天或当文件长满时都会创建一个新的日志文件。问题:它根本没有删除旧文件,所以现在日志文件夹充满了数周前的日志文件。您能否提出问题所在以及如何使其发挥作用?

<target name="appLogFile" type="File"
 fileName="d:\my_logs\nlog_test-$date:format=yyyy-MM-dd.log"
 archiveFileName="d:\my_logs\nlog_test-#.log" 
 archiveAboveSize="104857600" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd"
 maxArchiveFiles="2" maxArchiveDays="2"
 openFileCacheTimeout="30" concurrentWrites="True" keepFileOpen="True" createDirs="True"
 layout="$date:format=yyy-MM-dd HH\:mm\:ss.fff K $message" />

【问题讨论】:

【参考方案1】:

问题看起来像,您每天登录不同的文件,因为文件名是使用当前日期创建的。第二天,对新文件进行记录。如果当前文件没有发生替换,则在达到最大大小之前不会创建存档。

请尝试以下配置,

<target name="appLogFile" type="File"
 fileName="d:\my_logs\nlog_test.log"
 archiveFileName="d:\my_logs\archives\nlog_test-#.log" 
 archiveAboveSize="104857600" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd"
 maxArchiveFiles="2" maxArchiveDays="2"
 openFileCacheTimeout="30" concurrentWrites="True" keepFileOpen="True" createDirs="True"
 layout="$date:format=yyy-MM-dd HH\:mm\:ss.fff K $message" />

【讨论】:

好吧,为什么归档进程没有启动是有道理的,而且它似乎只会删除带有 *..log 后缀的文件。请注意您的配置会在日志文件上产生不同的时间(和顺序)标记。我最初想避免过多的重命名,因为我们的文件被 Splunk Monitor 使用,但幸运的是,它似乎可以顺利处理文件翻转。因此,基于此,我接受您的回答。 是的,你是对的。另外,在我的配置中 archiveNumbering="DateAndSequence" 和 archiveDateFormat="yyyy-MM-dd" 也不需要。我在复制时错误添加的。布局可以稍微改变一下。【参考方案2】:

NLog 4.5(和更新的版本)使得使用动态布局进行文件归档变得容易:

<target name="appLogFile" type="File"
 fileName="d:\my_logs\nlog_test-$date:format=yyyy-MM-dd.log"
 archiveAboveSize="104857600"
 maxArchiveFiles="2" maxArchiveDays="2"
 openFileCacheTimeout="30" concurrentWrites="True" keepFileOpen="True"
 layout="$date:format=yyy-MM-dd HH\:mm\:ss.fff K $message" />

通过删除archiveFileName + archiveNumbering + archiveDateFormat

另请参阅:https://github.com/NLog/NLog/wiki/File-target#archive-old-log-files

另见:https://github.com/NLog/NLog/wiki/File-target#dynamic-vs-static-archive-logic

【讨论】:

以上是关于NLog 不会删除旧文件的主要内容,如果未能解决你的问题,请参考以下文章

从Google云端硬盘文件夹中删除旧文件

使用 Overwrite 模式时 Spark 不会删除 MemSql 中的旧数据

Inno Setup安装前删除旧文件和文件夹

.env 文件中的 MySQL 密码不起作用,但在 database.php 中工作正常(env() 缓存旧密码,config:clear 不会删除它)

pageChange 不会删除旧事件

UICollectionView reloadSection 不会从视图层次结构中删除旧视图