.NET Frameworkを使っていてログを記録するときに使用できるライブラリNLogの使い方をメモします。
NLogの特徴
NLogはログ収集のプラットフォームであり、.NETのほか、NETSTANDARD、Xamarin、Silverlight、Windows Phoneなどをサポートしています。
ログ出力先や出力フォーマットの定義はconfigファイルにより指定可能です。
また、自分で好きな出力先(Target)をコーディングして追加することも可能です。
NLogの導入
- 環境
- Visual Studio 2015 Community
- NLog 4.4.3
にて試しました。
-
サンプルプロジェクト作成
今回はC#にて任意のプロジェクトを作成しました。
フォームをひとつ持つWindowsアプリケーションです。 -
NLogライブラリの導入
プロジェクトを右クリック→NuGetパッケージの管理からNLogを検索し、NLog.Configを選択して、右側のインストールボタンにてインストールします。
このとき、必要とされるライブラリが同時にインストールされます。
-
ロガー設定
ログを出力したいクラスにて、ロガーを設定します。
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
-
ログ出力
ログを出力したい箇所で、設定したロガーを用いて次のように記述。
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
という名前のフォルダを作成し、その中に日付ごとの名前のログファイルを作成します。
<?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つおき、そのクリックイベントハンドラにてログを出力するようにします。
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 =====