NLog 不会删除旧的日志文件
NLog doesn't delete old log files
我的 Windows 服务中有 NLog 的这个配置。要求是每天1个文件,最多保留10个文件。
<variable name="logPath" value="D:\infra\project\logs"/>
<targets>
<target xsi:type="AsyncWrapper" name="main.fileAsyncWrapper">
<target xsi:type="RetryingWrapper" name="main.fileRetryWrapper" retryCount="10" retryDelayMilliseconds="1000">
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
archiveFileName=" ${logPath}\archive\service-main-{#}.log"
archiveNumbering="Rolling"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true"
openFileCacheTimeout="30"/>
</target>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="main.fileAsyncWrapper" />
</rules>
不知何故,旧文件没有被删除(我的目录中现在有 12 个)。甚至没有创建存档目录。我做错了什么?
Per documentation,我删除了 archiveEvery="Day"
,它没有得到我想要的结果。但是删除并没有使删除工作。
我 运行 Windows 使用 NLog 4.5.5 和 .NET 4.6.1 的服务器。
你的配置对我来说没有任何意义。认为您必须解释您期望您的配置如何工作。您不遵循示例的任何原因:https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples
但是因为你在FileName中配置了${date:format=yyyy-MM-dd}
,并且没有指定archiveEvery(或archiveAboveSize)所以它永远不会触发任何归档操作。
我建议您像这样配置 NLog:
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\service-main.log"
archiveFileName="${logPath}\archive\service-main-{#}.log"
archiveNumbering="Rolling"
archiveEvery="Day"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />
或者像这样配置 NLog(需要 NLog 4.5 或更新版本):
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />
或者像这样配置 NLog(支持 NLog 4.4 或更早版本):
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}/win-service-${date:format=yyyy-MM-dd}.log"
archiveFileName="${logPath}/win-service-{#}.log"
archiveDateFormat="yyyy-MM-dd"
archiveNumbering="Date"
archiveEvery="Year"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />
我的 Windows 服务中有 NLog 的这个配置。要求是每天1个文件,最多保留10个文件。
<variable name="logPath" value="D:\infra\project\logs"/>
<targets>
<target xsi:type="AsyncWrapper" name="main.fileAsyncWrapper">
<target xsi:type="RetryingWrapper" name="main.fileRetryWrapper" retryCount="10" retryDelayMilliseconds="1000">
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
archiveFileName=" ${logPath}\archive\service-main-{#}.log"
archiveNumbering="Rolling"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true"
openFileCacheTimeout="30"/>
</target>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="main.fileAsyncWrapper" />
</rules>
不知何故,旧文件没有被删除(我的目录中现在有 12 个)。甚至没有创建存档目录。我做错了什么?
Per documentation,我删除了 archiveEvery="Day"
,它没有得到我想要的结果。但是删除并没有使删除工作。
我 运行 Windows 使用 NLog 4.5.5 和 .NET 4.6.1 的服务器。
你的配置对我来说没有任何意义。认为您必须解释您期望您的配置如何工作。您不遵循示例的任何原因:https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples
但是因为你在FileName中配置了${date:format=yyyy-MM-dd}
,并且没有指定archiveEvery(或archiveAboveSize)所以它永远不会触发任何归档操作。
我建议您像这样配置 NLog:
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\service-main.log"
archiveFileName="${logPath}\archive\service-main-{#}.log"
archiveNumbering="Rolling"
archiveEvery="Day"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />
或者像这样配置 NLog(需要 NLog 4.5 或更新版本):
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />
或者像这样配置 NLog(支持 NLog 4.4 或更早版本):
<target
xsi:type="File"
name="main.file"
layout="${message}"
fileName="${logPath}/win-service-${date:format=yyyy-MM-dd}.log"
archiveFileName="${logPath}/win-service-{#}.log"
archiveDateFormat="yyyy-MM-dd"
archiveNumbering="Date"
archiveEvery="Year"
maxArchiveFiles="10"
encoding="utf-8"
keepFileOpen="true" />