LoginSignup
51

More than 5 years have passed since last update.

NLogでログを記録する

Posted at

.NET Frameworkを使っていてログを記録するときに使用できるライブラリNLogの使い方をメモします。

NLogの特徴

NLogはログ収集のプラットフォームであり、.NETのほか、NETSTANDARD、Xamarin、Silverlight、Windows Phoneなどをサポートしています。
ログ出力先や出力フォーマットの定義はconfigファイルにより指定可能です。
また、自分で好きな出力先(Target)をコーディングして追加することも可能です。

NLogの導入

  • 環境
    • Visual Studio 2015 Community
    • NLog 4.4.3

にて試しました。

  1. サンプルプロジェクト作成
    今回はC#にて任意のプロジェクトを作成しました。
    フォームをひとつ持つWindowsアプリケーションです。

  2. NLogライブラリの導入
    プロジェクトを右クリック→NuGetパッケージの管理からNLogを検索し、NLog.Configを選択して、右側のインストールボタンにてインストールします。
    このとき、必要とされるライブラリが同時にインストールされます。
    NLog-fig1.jpg

  3. ロガー設定
    ログを出力したいクラスにて、ロガーを設定します。
    private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

  4. ログ出力
    ログを出力したい箇所で、設定したロガーを用いて次のように記述。

Program.cs
        static void Main()
        {
            logger.Info("===== Program Start =====");
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            logger.Info("===== Program End =====");
        }

設定ファイル

NLogの出力先や出力フォーマットを設定するのは、NLog.ConfigというXML形式のファイルです。
NuGetにてNLogライブラリをプロジェクトにインストールすると、自動的にプロジェクトに追加されています。
これを編集して、以下のようにすると、
実行モジュールの存在するフォルダにlogという名前のフォルダを作成し、その中に日付ごとの名前のログファイルを作成します。

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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <targets>
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
                layout="${longdate} [${uppercase:${level}}] ${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="f" />
  </rules>
</nlog>

実行例

上記のサンプルに追加して、フォームにボタンを1つおき、そのクリックイベントハンドラにてログを出力するようにします。

Form1.cs
    public partial class Form1 : Form
    {
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            logger.Info("button1 Pushed!");
        }
    }

プロジェクトをビルドし、実行してボタンを何回か押してアプリケーションを終了すると、以下のようなログファイルが出力されます。

2017-03-06 21:32:06.0151 [INFO] ===== Program Start =====
2017-03-06 21:32:07.5155 [INFO] button1 Pushed!
2017-03-06 21:32:08.0780 [INFO] button1 Pushed!
2017-03-06 21:32:08.4531 [INFO] button1 Pushed!
2017-03-06 21:32:09.3127 [INFO] ===== Program End =====

参考

Configファイルの記載方法
ログの記載フォーマット

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51