NLog 在每日滚动时不写 header

NLog not writing header on daily rollover

Nlog 在我的 Windows 服务中每天滚动日志文件时不会写入 header。如果日志文件不存在,它会写入 header,如果 archiveEvery="Minute",那么 header 会写入新的日志文件。这是 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>

这是一个错误吗?我正在通过检查一天的第一个日志条目的代码并将 header 等价物记录为信息条目来解决这个问题。

您应该使用带有动态文件名的存档模式(没有 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}"
/>

另请参阅: