【问题标题】:NLog doesn't delete old log filesNLog 不会删除旧的日志文件
【发布时间】:2018-10-10 10:50:17
【问题描述】:

我的 Windows 服务中有此 NLog 配置。要求是每天 1 个文件,最多保留 10 个文件。

  <variable name="logPath" value="D:\infra\project\logs"/>

  <targets>
    <target xsi:type="AsyncWrapper" name="main.fileAsyncWrapper">
      <target xsi:type="RetryingWrapper" name="main.fileRetryWrapper" retryCount="10" retryDelayMilliseconds="1000">
          <target
              xsi:type="File"
              name="main.file"
              layout="${message}"
              fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
              archiveFileName=" ${logPath}\archive\service-main-{#}.log"
              archiveNumbering="Rolling"
              maxArchiveFiles="10"
              encoding="utf-8"
              keepFileOpen="true"
              openFileCacheTimeout="30"/>
      </target>
    </target>
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="main.fileAsyncWrapper" />
  </rules>

不知何故,旧文件没有被删除(我的目录中现在有 12 个)。甚至没有创建存档目录。我做错了什么?
Per documentation,我删除了archiveEvery="Day",它没有得到我想要的结果。但是删除并没有使删除工作。
我使用 NLog 4.5.5 和 .NET 4.6.1 运行 Windows Server。

【问题讨论】:

    标签: .net windows-services nlog


    【解决方案1】:

    您的配置对我没有任何意义。认为你必须解释你期望你的配置如何工作。您不遵循示例的任何原因:https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples

    但是因为您在 FileName 中配置了${date:format=yyyy-MM-dd},并且没有指定archiveEvery(或archiveAboveSize),所以它永远不会触发任何归档操作。

    我建议你像这样配置你的 NLog:

          <target
              xsi:type="File"
              name="main.file"
              layout="${message}"
              fileName="${logPath}\service-main.log"
              archiveFileName="${logPath}\archive\service-main-{#}.log"
              archiveNumbering="Rolling"
              archiveEvery="Day"
              maxArchiveFiles="10"
              encoding="utf-8"
              keepFileOpen="true" />
    

    或者您像这样配置您的 NLog(需要 NLog 4.5 或更高版本):

          <target
              xsi:type="File"
              name="main.file"
              layout="${message}"
              fileName="${logPath}\win-service-${date:format=yyyy-MM-dd}.log"
              maxArchiveFiles="10"
              encoding="utf-8"
              keepFileOpen="true" />
    

    或者你像这样配置 NLog(支持 NLog 4.4 或更早版本):

          <target
              xsi:type="File"
              name="main.file"
              layout="${message}"
              fileName="${logPath}/win-service-${date:format=yyyy-MM-dd}.log"
              archiveFileName="${logPath}/win-service-{#}.log"
              archiveDateFormat="yyyy-MM-dd"
              archiveNumbering="Date"
              archiveEvery="Year"
              maxArchiveFiles="10"
              encoding="utf-8"
              keepFileOpen="true" />
    

    【讨论】:

    • 我试了第二个,效果很好。谢谢
    • 我认为问题是从一开始就配置错误。我确实多次阅读文档,但没有找到您的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2014-07-02
    • 1970-01-01
    • 2021-11-18
    • 2013-05-25
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多