NLog で内部のログを有効にする
NLog で内部のログを有効にするには、GitHub NLog の Wiki ページ Internal Logging を参照します。
https://github.com/NLog/NLog/wiki/Internal-Logging
Visual Studio のコンソールアプリで試してみます。
NuGet からNLogをインストール。インストールしたバージョンは 4.0.1。
(2015/06に4.0.0になった模様。InfoQ 最新版の NLog は例外ログを改善し、JSON/Zip をサポートした)
プロジェクトに NLog.config を追加します。
NLog.config はプロパティの「出力ディレクトリにコピー」を「常にコピーする/新しい場合はコピーする」のいずれかを設定します。
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" internalLogFile="c:\MyLogs\InternalLog.log" internalLogLevel="Trace" internalLogToConsole="true" internalLogToConsoleError="true" > <targets> <target xsi:type="File" name="toFile" fileName="${basedir}/logs/mylog.log" layout="${longdate} ${uppercase:${level}} ${message}" archiveFileName="${basedir}/logs/archives/mylog.{#}.log" archiveEvery="Minute" archiveNumbering="Date" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="toFile" /> </rules> </nlog>
設定は分刻みでアーカイブするようにしています。
Program.cs の方はこちら。
using NLog; namespace NLogTryApp { class Program { private static Logger logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { while(true) { logger.Debug("Hi,"); //Thread.Sleep(millisecondsTimeout: 1000); } } } }
実行すると、イニシャライズのログの他、logger.Debug("Hi,"); のタイミングで、MLog.config の internalLogFile の部分に設定したファイルに Trace レベルで以下の内部ログが出力されます。
2015-07-20 10:58:24.5160 Trace Opening C:\Users\fuga\Documents\Visual Studio 2013\Projects\NLogTryApp\NLogTryApp\bin\Debug\/logs\mylog.log with concurrentWrite=False
アーカイブの際はログは出力されない模様。
また、internalLogFile の部分に設定するファイルパスは、フォルダが作成されていないと内部ログは出力されません(もしかしたら今後機能追加が入るかもしれません)。
(サンプルでいうとc:\MyLogs\フォルダが作成されている必要がある。)
内部ログにはアーカイブ機能はありません。