【问题标题】:NLog not writing header on daily rolloverNLog 没有在每日翻转时写入标题
【发布时间】:2020-12-08 18:13:33
【问题描述】:

每天在我的 Windows 服务中滚动日志文件时,Nlog 不会写入标头。如果日志文件不存在,则写入标题,如果 archiveEvery="Minute" 则将标题写入新日志文件。这是 nlog 配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="trace"
      internalLogFile="C:\Log\InnerLog.txt"
      throwExceptions="true">

  <variable name="AppName" value="Test Service" />

  <targets>
    <target
      name="logfile"
      xsi:type="File"
      fileName="C:\Log\smgresp${date:format=MM-dd-yyyy}.log"
      layout="${longdate} ${level:uppercase=true} ${message}"
      archiveEvery="Day"
      maxArchiveFiles="30"
      header="${AppName} version ${assembly-version}"
    />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

这是一个错误吗?我正在通过在我的代码中检查一天的第一个日志条目并将标题等效为 Info 条目来解决它。

【问题讨论】:

  • 切记不要使用throwExceptions="true",除非万不得已,在排除 NLog.config 无法正确加载的原因时。它用于单元测试,会在生产环境中导致不需要的行为。
  • 谢谢 - 我已经从配置文件中删除了。

标签: nlog


【解决方案1】:

您应该使用带有动态文件名的存档模式(不带archiveEvery):

<target
  name="logfile"
  xsi:type="File"
  fileName="C:\Log\smgresp${date:format=MM-dd-yyyy}.log"
  layout="${longdate} ${level:uppercase=true} ${message}"
  maxArchiveFiles="30"
  header="${AppName} version ${assembly-version}"
/>

或者使用带有静态文件名的存档模式(archiveEveryarchiveFileName):

<target
  name="logfile"
  xsi:type="File"
  layout="${longdate} ${level:uppercase=true} ${message}"
  fileName="C:\Log\smgresp.log"
  archiveFileName="C:\Log\smgresp.{#}.txt"
  archiveEvery="Day"
  maxArchiveFiles="30"
  header="${AppName} version ${assembly-version}"
/>

另见:

【讨论】:

  • 谢谢!这解决了问题。我保留了动态并删除了archiveEvery 属性 - 没有意识到动态模式会在日期更改时自动创建文件。
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多