Nlog归档文件名:迭代而不是有效日期

时间:2018-01-15 12:20:34

标签: .net nlog

我的配置:

    <target xsi:type="File"
        name="default"
        archiveAboveSize="10000000"
        layout="${VerboseLayout}"
        fileName="${basedir}/logs/Log_${shortdate}.log"
        keepFileOpen="false"
        archiveFileName="${basedir}/logs/Log_${shortdate}.{##}.log"
        archiveNumbering="Sequence"
        archiveEvery="Day"
        maxArchiveFiles="50" />

有时候命名是可以的,有时而不是有效的日期我得到日期+ 1和迭代(如果达到archiveAboveSize上限)。 我的上一篇文件:

Log_2018-01-15.log
Log_2018-01-15.00.log (should be Log_2018-01-14)
Log_2018-01-13.log
Log_2018-01-13.00.log (should be Log_2018-01-12)
Log_2018-01-11.log
Log_2018-01-10.log

1 个答案:

答案 0 :(得分:1)

您正在使用NLog文件存档逻辑错误:

fileName="${basedir}/logs/Log_${shortdate}.log"
archiveFileName="${basedir}/logs/Log_${shortdate}.{##}.log"
archiveEvery="Day"

您不应为archiveFileName指定 $ {shortdate} 。它将使用当前时间,而不是前一个logevent(您期望的)的时间。

您不应指定archiveEvery="Day",因为fileName已包含${shortdate},因此它会自动滚动到新文件。

相反,当使用NLog 4.4或更早版本时,你应该这样做:

fileName="${basedir}/logs/Log_${date:format=yyyy-MM-dd}.log"
archiveFileName="${basedir}/logs/Log_{##}.log"
archiveDateFormat="yyyy-MM-dd"
archiveNumbering="DateAndSequence"
archiveAboveSize="10000000"
archiveEvery="Year"
maxArchiveFiles="50"
  • archiveFileName - 使用{#}可以使归档清理生成正确的文件通配符。
  • archiveDateFormat - 必须与fileName的$ {date:format =}相匹配(如果需要更改,请记住纠正两种日期格式)
  • archiveNumbering = DateAndSequence - 配置存档清理以支持将文件名解析为日期和序列号
  • archiveEvery = Year - 激活归档清理,还激活归档文件操作。由于配置的fileName会自动确保存档文件操作,因此我们不需要任何其他存档操作(例如,避免在午夜生成额外的空文件)。
  • maxArchiveFiles - 要保留多少个存档文件。

使用NLog 4.5(或更新版本)时,以下内容应该有效:

fileName="${basedir}/logs/Log_${shortdate}.log"
archiveAboveSize="10000000"
maxArchiveFiles="50"