如何删除日期超过X天的文件。这很简单,但我在一个文件夹中只记录了一天。我的NLog.config看起来像:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">
<extensions>
<add assembly="NLog.Extended" />
</extensions>
<variable name="LogHome" value="PATH"/>
<variable name="DailyDir" value="${LogHome}${date:format=yyyy}/${date:format=MM}/${date:format=dd}/"/>
<targets>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target
name="fatalLog"
xsi:type="File"
layout="${longdate}|${callsite}|${message}|${exception}"
fileName="${DailyDir}/Fatal.txt"
/>
</target>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target
name="errorLog"
xsi:type="File"
layout="${longdate}|${callsite}|${message}|${exception}"
fileName="${DailyDir}/Error.txt"
/>
</target>
</targets>
<rules>
<logger name="*" level="Fatal" writeTo="fatalLog" />
<logger name="*" level="Error" writeTo="errorLog" />
</rules>
</nlog>
答案 0 :(得分:10)
现在您正在包含日期的目录中创建日志。要使NLog能够自动管理当前和旧的日志文件,您需要使用NLog归档功能。如NLog文件目标文档here中所述,您可以将属性archiveFileName
和maxArchiveFiles
与每日日志一起使用,以便在NLog删除之前将日志文件保留X天。
您可能必须将所有存档日志保存在一个目录中,否则NLog将无法找到旧日志并将其删除。我将创建一个归档目录作为主日志目录的子目录,让NLog将所有归档日志放在那里,然后使用maxArchiveFiles
参数告诉NLog你想保留多少这些日志。
<targets>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target
name="fatalLog"
xsi:type="File"
layout="${longdate}|${callsite}|${message}|${exception}"
fileName="${LogHome}/Fatal.txt"
archiveFileName="${LogHome}/Archive/Fatal-${shortdate}.txt"
maxArchiveFiles="5"
archiveEvery="Day"
/>
</target>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target
name="errorLog"
xsi:type="File"
layout="${longdate}|${callsite}|${message}|${exception}"
fileName="${LogHome}/Error.txt"
archiveFileName="${LogHome}/Archive/Error-${shortdate}.txt"
maxArchiveFiles="5"
archiveEvery="Day"
/>
</target>
</targets>
应该为您提供两个包含当前日志的日志文件,以及一个归档目录,其中包含过去5天内每个目标的5个日志。
答案 1 :(得分:3)
NLog 4.5使设置存档清理更加容易:
<target
name="errorLog"
xsi:type="File"
layout="${longdate}|${callsite}|${message}|${exception}"
fileName="${DailyDir}/Error.${shortdate}.txt"
maxArchiveFiles="5"
/>
NLog 4.7还引入了设置maxArchiveDays
(如果还使用archiveAboveSize
,则很有用)。另请参阅:https://github.com/NLog/NLog/wiki/File-target#archive-old-log-files
答案 2 :(得分:2)
<target name="Logs" xsi:type="File" fileName="${basedir}/Logs/${shortdate}/${shortdate}-${level}.csv" archiveAboveSize="10240" keepFileOpen="false"
maxArchiveDays="30" maxArchiveFiles="90">
<layout xsi:type="CSVLayout">
<column name="time" layout="${longdate}" />
<column name="logger" layout="${logger}"/>
<column name="message" layout="${message}" />
</layout>
</target>
我在目标中使用了上面的代码来克服此问题。如果文件增加10MB并以CSV格式存储,它将创建一个新文件,因此很容易在excel中读取并删除30天前的文件。