Nlog 存档文件名:迭代而不是有效日期
Nlog archive file name: iteration instead valid date
我的配置:
<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
您使用的 NLog 文件存档逻辑错误:
fileName="${basedir}/logs/Log_${shortdate}.log"
archiveFileName="${basedir}/logs/Log_${shortdate}.{##}.log"
archiveEvery="Day"
您不应为 archiveFileName
指定 ${shortdate}。它将使用当前时间,而不是上一个 logevent 的时间(您所期望的)。
您不应指定 archiveEvery="Day"
,因为文件名已包含 ${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 - 必须匹配文件名的 ${date:format=}(因此如果需要更改,请记住更正两种日期格式)
- archiveNumbering=DateAndSequence - 配置存档清理以支持将文件名解析为日期和序列号
- archiveEvery=Year - 激活存档清理,还有存档文件操作。因为配置的fileName自动确保了归档文件操作,那么我们不希望有任何额外的归档操作(例如避免在午夜产生额外的空文件)。
- maxArchiveFiles - 保留多少归档文件。
使用 NLog 4.5(或更新版本)时,以下内容应该有效:
fileName="${basedir}/logs/Log_${shortdate}.log"
archiveAboveSize="10000000"
maxArchiveFiles="50"
我的配置:
<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
您使用的 NLog 文件存档逻辑错误:
fileName="${basedir}/logs/Log_${shortdate}.log"
archiveFileName="${basedir}/logs/Log_${shortdate}.{##}.log"
archiveEvery="Day"
您不应为 archiveFileName
指定 ${shortdate}。它将使用当前时间,而不是上一个 logevent 的时间(您所期望的)。
您不应指定 archiveEvery="Day"
,因为文件名已包含 ${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 - 必须匹配文件名的 ${date:format=}(因此如果需要更改,请记住更正两种日期格式)
- archiveNumbering=DateAndSequence - 配置存档清理以支持将文件名解析为日期和序列号
- archiveEvery=Year - 激活存档清理,还有存档文件操作。因为配置的fileName自动确保了归档文件操作,那么我们不希望有任何额外的归档操作(例如避免在午夜产生额外的空文件)。
- maxArchiveFiles - 保留多少归档文件。
使用 NLog 4.5(或更新版本)时,以下内容应该有效:
fileName="${basedir}/logs/Log_${shortdate}.log"
archiveAboveSize="10000000"
maxArchiveFiles="50"