Introduction

備忘録。
よくあるロギングライブラリが備えている機能として、実行した日時毎にログファイルを出力し、古いファイルを退避または削除していく機能が NLog にも備わっている。
が、備わってはいるが、バージョンによって異なる挙動をするため、設定によっては意図した挙動をしない。

What does it mean?

3.0.0

かなり古いバージョンだが、原則、このバージョンではカレントのログファイルに日付をつけ、退避 (Archive) するファイルにも日付をつけることができない。

1
2
3
4
5
6
7
8
9
10
11
<target
name="ApplicationLogFile"
xsi:type="File"
layout="${longdate} [${uppercase:${level:padding=-5}}] ${message} ${exception:format=tostring}"
fileName="${basedir}/Logs/Application.log"
encoding="UTF-8"
archiveFileName="${basedir}/Logs/Application.{#}.log"
archiveEvery="Day"
archiveNumbering="Date"
archiveDateFormat="yyyyMMdd"
maxArchiveFiles="7" />

上記の設定では

  • カレントのログファイルは Application.log
    • 日付をつけることができない
  • Logs 配下に Application.<yyyyMMdd>.log という名前で archive する
  • archive されるファイルが最大が 7

となる

4.0.0

こちらはそこそこ新しいバージョン。
archiveEvery=Year が肝。

1
2
3
4
5
6
7
8
9
10
11
<target
name="ApplicationLogFile"
xsi:type="File"
layout="${longdate} [${uppercase:${level:padding=-5}}] ${message} ${exception:format=tostring}"
fileName="${basedir}/Logs/Application.${date:format=yyyyMMdd}.log"
encoding="UTF-8"
archiveFileName="${basedir}/Logs/Application.{#}.log"
archiveNumbering="Date"
archiveEvery="Year"
archiveDateFormat="yyyyMMdd"
maxArchiveFiles="7" />

上記の設定では

  • カレントのログファイルは Application.<today:yyyyMMdd>.log
  • Logs 配下に Application.<yyyyMMdd>.log という名前で archive する
  • archive されるファイルが最大が 7

となる。
現在の最新バージョンでも有効。

4.5.0

こちらもそこそこ新しいバージョン。
archiveEvery が存在しないことが肝。

1
2
3
4
5
6
7
8
9
10
<target
name="ApplicationLogFile"
xsi:type="File"
layout="${longdate} [${uppercase:${level:padding=-5}}] ${message} ${exception:format=tostring}"
fileName="${basedir}/Logs/Application.${date:format=yyyyMMdd}.log"
encoding="UTF-8"
archiveFileName="${basedir}/Logs/Application.{#}.log"
archiveNumbering="Date"
archiveDateFormat="yyyyMMdd"
maxArchiveFiles="7" />

上記の設定では

  • カレントのログファイルは Application.<today:yyyyMMdd>.log
  • Logs 配下に Application.<yyyyMMdd>.log という名前で archive する
  • archive されるファイルが最大が 7

となる。
恐らく archiveEvery=None となり、archiveEvery=Year に近い挙動になっていると思われる。