miso_soup3 Blog

主に ASP.NET 関連について書いています。

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\フォルダが作成されている必要がある。)
内部ログにはアーカイブ機能はありません。