x天后删除日志文件

Fre*_*ddy 40 logging nlog archive

我想使用文件目标登录Nlog,就像在这个例子中一样.如何在X几天之后删除文件而不归档它们?或者是否可以将文件存档到同一个文件夹?

cce*_*lar 69

您可以简单地使用内置归档功能.此设置将保留7个旧日志文件以及当前日志.清理由NLog自动完成.

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}" 
            fileName="${basedir}/logs/logfile.txt" 
            archiveFileName="${basedir}/logs/log.{#}.txt"
            archiveEvery="Day"
            archiveNumbering="Rolling"
            maxArchiveFiles="7"
            concurrentWrites="true" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

另请参阅文件目标的文档

  • 如果我使用archiveAboveSize会发生什么?这将不再有效,因为如果我在一天内有7个文件,它将删除所有其余的.这有解决方案吗? (3认同)

小智 10

我发现如果我在日志文件名中存档带有日期戳的文件,则存档日志会混淆并{#}始终转换为"0",导致旧日志永远不会被删除.此外,如果我在日志文件名中使用GDC引用,它根本不会切换日志.

如果我想要这些花哨的日志文件名,我现在必须手动删除旧日志.他们在文件名中有日期的事实导致他们自动切换文件.

// Delete log files older than X days

var dirInfo = new DirectoryInfo(".");
var oldestArchiveDate = DateTime.Now - new TimeSpan(30, 0, 0, 0);
foreach (FileInfo fi in dirInfo.GetFiles())
    if (fi.Name.StartsWith("log-") && fi.Name.EndsWith(".txt") && fi.CreationTime < oldestArchiveDate)
        fi.Delete();

var midnight = DateTime.Today.AddDays(1);
_oldLogCleanUpThread = new System.Threading.Timer(OldLogCleanUpThreadMethod, null, midnight - DateTime.Now, TimeSpan.FromDays(1));
Run Code Online (Sandbox Code Playgroud)

nlog目标:

 filename="${environment:variable=HOMEDRIVE}${environment:variable=HOMEPATH}\logs\log-${gdc:item=MySpecialId}-${date:format=yyyyMMdd}.txt"
Run Code Online (Sandbox Code Playgroud)
GDC.Set("MySpecialId", ...);
Run Code Online (Sandbox Code Playgroud)


wag*_*ghe 4

我不知道这是否回答了您的问题,但看起来maxArchiveFiles应该做您想做的事情。我自己实际上并没有使用过这个选项,所以我不能确定。您当然可以将日志文件“存档”在同一文件夹中。

如果是我,我会制作一个非常小的程序来进行一些日志记录并设置时间 ( archiveEvery="minute"),以便很容易强制归档逻辑启动。设置maxArchiveFiles为 5 之类的值,看看 NLog 是否只保留 5 个日志文件。运行你的程序一段时间,也许可以通过计时器生成日志消息,这样你就可以轻松地将日志消息间隔足够的时间,以便 NLog 的归档/滚动逻辑启动。

尝试存档文件命名模板。使用该archiveNumbering选项可以让您对存档文件的编号方式进行一些控制。

抱歉,我无法给出更明确的答案或具体的例子,但我也没有使用这些选项,所以我只需要做相同的实验,而我现在时间紧迫。