.NETでログファイルのローテーションに日付を使用する
current.log archive_20150524.log archive_20150523.log
当日は日付なしのファイル名で、過去ファイルには日付がつくようなログローテーションを行う方法を調べました。 例えば、2015年5月25日の時点だと上記のようになっています。
NLogを使用します。対象バージョンは3以降です。そしていきなり設定ファイルを公開します。
NLog.config
<?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"> <targets> <target xsi:type="File" name="f" fileName="${basedir}/logs/current.log" layout="${longdate} ${uppercase:${level}} ${message}" archiveEvery="Day" archiveFileName="${basedir}/logs/archive_{#}.log" archiveNumbering="Date" archiveDateFormat="yyyyMMdd" maxArchiveFiles="3"/> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="f" /> </rules> </nlog>
ここで重要なのは、archiveFileNameとarchiveEveryとarchiveNumbering、archiveDateFormatです。
archiveFileNameが過去ログの保存ファイル名で、archiveEveryはローテーションを行うタイミング(ここでは日ごと)、archiveNumberingは過去ログファイル名につける名前の規則(日付形式)、archiveDateFormatは「archiveNumbering=Date」の時に日付の書式を指定します。 さらにmaxArchiveFilesを指定すると、指定した数より古い過去ファイルは削除してくれます。
ちなみに、ログ出力の実行は以下のように行います。
class Program { private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { logger.Info("TEST"); } }
今回はC#.NETで試してみましたが、VB.NETでも動くようです。
使用環境
Windows 8.1 64bit
Visual Studio 2013 Professional
NLog 3.2.1
NLog.Config 3.2.1
NLog.Extended 3.2.1
NLog.Schema 3.2.1