設定ファイル「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">

  <!--(1)出力先(ターゲット)の設定-->
  <targets>
    <!--log.txtというファイルに出力-->
    <target name="file" xsi:type="File" fileName="${basedir}/log.txt" />
  </targets>

  <!--(2)出力ルールの設定-->
  <rules>
    <!-- デバッグレベル以上のログをfileターゲットに出力-->
    <logger name="*" minlevel="Debug" writeTo="file" />
  </rules>

</nlog>

NLog.configでは、targetsとrulesの設定を行います。

(1)ターゲット(targets)の設定

ターゲットは出力方法の設定です。ここでは、「xsi:type="File"」と宣言することでファイル出力を指定しています。また、「fileName="${basedir}/log.txt"」と宣言することでファイル名をlog.txtと指定しています。

なお、${~}はレイアウトレンダラーと呼ばれる記法です。この記法を使うことでアプリ実行時の値を使用できます。ここでは、${basedir}と記述して実行フォルダを使用しています。

(2)ルール(rules)の設定

ルールは「ロガー名」「レベル」「ターゲット」の組み合わせです。ルールにマッチした場合にログが出力されます。ここでは、デバッグレベル以上のログをfileターゲットに出力するように設定しています。この設定を変更することで、開発時はすべてのログ、本番では警告レベル以上のログといった柔軟な出力が可能となります。

ログ出力するコード

続けて、ボタンクリック時にログ出力するコードを見てみましょう。

ログ出力をするコード(C#)

using System;
using System.Windows.Forms;
//(1)NLogの名前空間を宣言
using NLog;

namespace Sample
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

//(2)ログ出力用の「ロガー」を宣言
private static Logger _logger = LogManager.GetCurrentClassLogger();

//ボタンをクリックした時のイベント
private void button1_Click(object sender, EventArgs e)
{
   //(3)ログを出力(上が重要、下が軽微)
  _logger.Fatal("致命的レベル");
  _logger.Error("エラーレベル");
  _logger.Warn("警告レベル");
  _logger.Info("情報レベル");
  _logger.Debug("デバッグレベル");
  _logger.Trace("トレースレベル");
}

} }

(1)NLogの名前空間を宣言

NLogの中心的な役割を果たすLoggerクラスとLogManagerクラスを使用するため、NLog名前空間をインポートしておきます。

(2)ログ出力用の変数「ロガー」を宣言

LogManagerクラスのGetCurrentClassLoggerメソッドを呼び出すとことで、現在の名前空間とクラス名が設定されたロガーを取得できます。このサンプルの場合「LogManager.GetLogger("Sample.Form1")」と同義となります。

(3)ログを出力

LoggerクラスにはFatal、Error、Warn、Info、Debug、Traceというログ出力用のメソッドが用意されています。Fatalメソッドは最も重要度が高く、逆にTraceメソッドは最も重要度が低くなります。プログラムを書く時にこれらのメソッドを使い分けることで、ログの重要度を管理します。

実行結果

それでは、アプリケーションを実行してみましょう。ログの出力先はexeファイルと同じフォルダ(bin\Debugなど)のlog.txtになります。

出力されたログ(log.txt)

2010-03-06 16:57:35.3993|FATAL|Sample.Form1|致命的レベル
2010-03-06 16:57:35.3993|ERROR|Sample.Form1|エラーレベル
2010-03-06 16:57:35.3993|WARN|Sample.Form1|警告レベル
2010-03-06 16:57:35.3993|INFO|Sample.Form1|情報レベル
2010-03-06 16:57:35.3693|DEBUG|Sample.Form1|デバッグレベル

正しくログが出力されていることがわかります。NLog.configで「minlevel="Debug"」と指定しているため、トレースレベルのログは出力されていません。このようにNLogを使うことで簡単にログを出力できました。