Help us understand the problem. What is going on with this article?

NLogでログを記録する

More than 3 years have passed since last update.

.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ファイルの記載方法
ログの記載フォーマット

hsagae
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした