【问题标题】:NLog limit size of daily archive每日存档的 NLog 限制大小
【发布时间】:2017-03-23 13:32:04
【问题描述】:

我正在使用 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>

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

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

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

【问题讨论】:

  • 您找到解决方案了吗?

标签: .net logging nlog


【解决方案1】:

是的,通过使用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>

文件名将是:

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

【讨论】:

  • 这似乎不起作用。我将其设置为maxArchiveFiles="7"。它保留 7 个文件,而不是 7 天的文件。因此,如果我的文件在一天内按大小滚动 10 次,我什至无法获得一天的日志。
  • @Swoogan 这是正常行为。如果没有达到限制,您将在存档目录中找到 7 天日志。但是如果达到限制,比如说 20GB 的日志,旧的日志将被覆盖。目前,按天归档和按大小归档是相互排斥的。使用属性 maxArchiveFiles nlog 保留 7 个日志。在未来的实现中,Nlog 可能会添加 maxSizeArchiveFilesPerDay 和 maxSizeArchive 属性,让您拥有更多的通用性。
【解决方案2】:

所以你要解决三个问题 -

  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2011-09-15
    • 2018-09-11
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多