NLog限制每日存档的大小

Joh*_*tor 6 .net logging nlog

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

MyApp.2016-10-01_1   // (100mb limit reached)
MyApp.2016-10-01_2
MyApp.2016-10-02
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
Run Code Online (Sandbox Code Playgroud)

Jul*_*ian 6

是的,通过使用archiveNumbering=DateAndSequencearchiveAboveSize.

例如

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>
Run Code Online (Sandbox Code Playgroud)

文件名将是:

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
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不起作用。我将其设置为 `maxArchiveFiles="7"`。它保留 7 个文件,而不是 7 天的文件。因此,如果我的文件在一天内按大小滚动 10 次,我什至得不到一天的日志。 (2认同)