我正在使用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>
答案 0 :(得分:6)
是的,使用archiveNumbering=DateAndSequence
和archiveAboveSize
。
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)
所以您要解决三个问题-
您可以尝试一下。 如果在文件名中包含$ {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