NLog限制每日存档的大小

时间:2016-11-09 16:48:18

标签: .net logging nlog

我正在使用NLog日志记录框架。我的应用程序需要保存最近14天的日志存档。

我使用的当前NLog.config看起来像这样。

void countCharacters(const char n[], char count[])
{
 int c = 0; 
 while (n[c] != '\0')
  {
    if (n[c] >= '0' && n[c] <= '9')
        count[n[c] - '0']++;
  }
}

void myFunction()
{
 string newString = "1 0 3 0 4 0 7 0";
 char count[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
 const char *charString = newString.c_str();
 countCharacters(charString, count);
 for (unsigned int z = 0; z < strlen(charString); z++)
        {
            if (count[z] > 1)
                {
                newString.erase(remove(newString.begin(), newString.end(), count[z]), newString.end());
                }
        }
}

问题是我的应用程序生成了大量日志条目,有时每日日志的大小可能超过1 GB。是否可以保留14天结构的每日存档,并添加新的子组,如果日志的大小限制超过100 mb,则另外存档单日。

所以最终的日志输出看起来像这样

<targets>
  <target name="MyFile"
          xsi:type="File"
          fileName="C:\Logs\MyApp.log"
          encoding="utf-8"
          layout="${date:format=yyyyMMddHHmmss} ${message}"
          archiveEvery="Day"
          archiveFileName="C:\Logs\MyApp.{#}.log"
          archiveNumbering="Date"
          archiveDateFormat="yyyy-MM-dd"
          maxArchiveFiles="14" />
</targets>

2 个答案:

答案 0 :(得分:6)

是的,使用archiveNumbering=DateAndSequencearchiveAboveSize

e.g。

100MB = 104857600字节

<targets>
  <target name="MyFile"
          xsi:type="File"
          fileName="C:\Logs\MyApp.log"
          encoding="utf-8"
          layout="${date:format=yyyyMMddHHmmss} ${message}"
          archiveEvery="Day"
          archiveFileName="C:\Logs\MyApp.{#}.log"
          archiveNumbering="DateAndSequence" 
          archiveDateFormat="yyyy-MM-dd"
          archiveAboveSize="104857600"
          maxArchiveFiles="14" />
</targets>

文件名将是:

MyApp.2016-10-01.1   // (100mb limit reached)
MyApp.2016-10-01.2
MyApp.2016-10-02.1
MyApp.2016-10-03.1   // (100mb limit reached)
MyApp.2016-10-03.2   // (100mb limit reached)
MyApp.2016-10-03.3
...
MyApp.2016-10-14.1

答案 1 :(得分:1)

所以您要解决三个问题-

  1. 每天创建一个新的.log文件。
  2. 为每个文件添加大小限制。
  3. 最多保留14天的日志。

您可以尝试一下。 如果在文件名中包含$ {shortdate},则文件名将为MyApp_yyyyMMdd.log,它本身每天都会滚动。

现在要进行大小限制存档,请使用archiveNumbering =“ Sequence”和archiveAboveSize =“ your_size_limit_here”。

NLog 4.7引入了一个新属性'maxArchiveDays',将该属性设置为您的值14。

有了这些,目标应该看起来像

    <target xsi:type="File" name="MyFile" 
            fileName="C:\Logs\MyApp_${shortdate}.log" 
            layout="<layout_here>" 
            ....
            archiveFileName="C:\Logs\MyApp_${shortdate}_{#}.log"
            archiveNumbering="Sequence" 
            archiveAboveSize="<your_size_limit_here>" 
            maxArchiveDays="14"/>

参考:https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples#archive-numbering-examples