Nlog 动态文件名归档不起作用

Posted

技术标签:

【中文标题】Nlog 动态文件名归档不起作用【英文标题】:Nlog Dynamic FileName Archiving does not work 【发布时间】:2021-12-18 16:06:23 【问题描述】:

我想在我的日志中使用动态文件名 ($shortdate),并想删除早于 x 天的日志。所以这是我的 Nlog 配置:

<target name="All_File" xsi:type="File" filename="$basedir/Log/$shortdate-$machinename-PROGRAM.log"
                layout="$longdate|$level:uppercase=true:padding=-5|$callsite:includeNamespace=false:padding=-45: $message"
                maxArchiveFiles="1" archiveOldFileOnStartup="true"/>

使用此配置,启动后我应该只有一个日志文件。但 NLog 不会删除旧日志。

我哪里错了? 使用 NLog 4.7.5。

【问题讨论】:

NLog 包含当前活动文件(由filename="..." 指定),然后是 X 个存档文件。所以maxArchiveFiles="1" 可能会产生 2 个文件(1 个当前文件 + 1 个存档文件)。另见github.com/NLog/NLog/issues/1479 + github.com/NLog/NLog/issues/2775 谢谢,罗尔夫。我了解,我在这里混合了存档和活动文件。你知道我怎样才能实现这个用例吗? - 我不想要任何存档文件,只想要活动文件(动态命名) - 应该只存在一定数量的活动文件(例如最后 30 个) 我认为这是一种非常简单直接的方法,但我不知道如何这样做... 只有 1 个活动文件。如果要保留最后 30 个文件,则只需指定 maxArchiveFiles="30" 嗨 Rolf,这正是我所做的,它对我不起作用...如果我设置 maxArchiveFiles="1",应该有 1 个活动文件(今天)和昨天的文件,正确的?我无法让它工作...... 听起来你忘记了我的第一条评论。 “NLog 有当前活动文件(由filename="..." 指定),然后是 X 个归档文件。”请注意,我随后回复了您的其他评论“应该只存在一定数量的活动文件(例如最后 30 个)”。同样总是有 1 个活动文件和 X 个存档文件(受 maxArchiveFiles 限制)。 【参考方案1】:

感谢 Rolf Kristensen,我现在明白了。 maxArchiveFiles="1" 对我不起作用。我刚去

<target name="All_File" xsi:type="File" filename="$basedir/Log/$shortdate-$machinename-PROGRAM.log"
                layout="$longdate|$level:uppercase=true:padding=-5|$callsite:includeNamespace=false:padding=-45: $message"
                maxArchiveDays="30"/>

更多信息:https://github.com/NLog/NLog/wiki/File-target#archive-old-log-files

【讨论】:

很高兴您找到了解决问题的方法。

以上是关于Nlog 动态文件名归档不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 5.0 nlog 实现不起作用

为啥即使 Eratothenes 筛子的时间复杂度为 O(nlog(log(n))),程序对于 n=100000 也不起作用

Jenkins存档单个文件不起作用

动态菜单活动不起作用? (如果条件不起作用)

xcodebuild 存档配置不起作用

HTML动态添加文件输入不起作用