.NET開発者のためのブログメディア

【.NET Frameworkのログ出力】C#のNLogを使ってログを出力する方法
2020年04月09日
アプリケーション開発を行う上で、ログの出力を考慮して設計することは、エンジニアの基本です。ログを出力しているとエラーが発生した場合に、エラー内容を知るのにとても役立ちます。ここでは、C#でログを出力する方法について、NLogの操作方法を中心に紹介します。
- PG
- C#でログを出力するための実装方法を詳しく教えてください!
- PM
- C#では「NLog」というライブラリを使用して、ログ出力のコーディングを行います。そんなに難しくもないので、ライブラリの導入方法やコーディング方法などをこれから確認していきましょう。
目次
NLogの導入と設定方法を確認
まずはNLogライブラリを導入します。今回使用するVisual Studioのバージョンは、Visual Studio Community 2017です。.NET Frameworkのバージョンは、4.6になります。
- NugetからNLogをインストールしましょう。
- ソリューションエクスプローラーに戻り、参照にNLogが追加されていることを確認しましょう。確認ができれば導入は成功です。
ソリューションエクスプローラーから「各々作成したプロジェクト名」で右クリック→「Nugetパッケージの管理」→「参照」タブ→検索フィールドにNLogと入力します。
表示されたことを確認して、インストールボタンを押下します。
次にNLogの設定を行います。各々のソリューションエクスプローラー内にProgram.csがあらかじめ準備されていると思います。そこにNLogの初期設定を追加していきましょう。
C#でNLogを使用するためには、プログラム上部でusing NLog;、using NLog.Config;、using NLog.Targets;命令がそれぞれ必要です。これをしないとシンタックスエラーの表示が消えないので、はじめに必ず設定しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using NLog; using NLog.Config; using NLog.Targets; namespace WindowsFormsApp18 { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { //↓↓追加 InitializeLogger(); //↑↑追加 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } //↓↓追加 private static void InitializeLogger() { var conf = new LoggingConfiguration(); //ファイル出力定義 var file = new FileTarget("file"); file.Encoding = System.Text.Encoding.GetEncoding("shift-jis"); file.Layout = "${longdate} [${threadid:padding=2}] [${uppercase:${level:padding=-5}}] ${callsite}() - ${message}${exception:format=ToString}"; file.FileName = "${basedir}/logs/sample_${date:format=yyyyMMdd}.log"; file.ArchiveNumbering = ArchiveNumberingMode.Date; file.ArchiveFileName = "${basedir}/logs/sample.log.{#}"; file.ArchiveEvery = FileArchivePeriod.None; file.MaxArchiveFiles = 10; conf.AddTarget(file); conf.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, file)); //イベントログ出力定義 ※ただし初回は管理者として実行しないとSourceの登録ができない var eventlog = new EventLogTarget("eventlog"); eventlog.Layout = "${message}${newline}${exception:format=ToString}"; eventlog.Source = "NLogNoConfigSample"; eventlog.Log = "Application"; eventlog.EventId = "1001"; conf.AddTarget(eventlog); conf.LoggingRules.Add(new LoggingRule("*", LogLevel.Error, eventlog)); // 設定を反映する LogManager.Configuration = conf; } //↑↑追加 } } |
C#のサンプルソースでNLogの使用方法を確認
ここでは、C#プログラムでNLogを実際に使用するコーディング方法を確認していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; using System.Windows.Forms; using NLog; namespace WindowsFormsApp18 { public partial class Form1 : Form { private Logger Test_logger = LogManager.GetCurrentClassLogger(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Test_logger.Info("スタート"); try { //ゼロ割エラーを起こします int test_zero = 0; int a = 3 / test_zero; } catch (Exception ex) { Test_logger.Error(ex, "ゼロ割エラーが起きました"); } } } } |
実行画面
ボタンを押下します。
出力ログ参照
ログファイルの内容
2019-12-12 10:19:37.2024 [ 1] [INFO ] WindowsFormsApp18.Form1.button1_Click() – スタート
2019-12-12 10:19:37.2672 [ 1] [ERROR] WindowsFormsApp18.Form1.button1_Click() – ゼロ割エラーが起きましたSystem.DivideByZeroException: 0 で除算しようとしました。
場所 WindowsFormsApp18.Form1.button1_Click(Object sender, EventArgs e) 場所 C:\Users\XXXXXX\source\repos\WindowsFormsApp18\WindowsFormsApp18\Form1.cs:行 25
2019-12-12 10:19:37.2672 [ 1] [ERROR] WindowsFormsApp18.Form1.button1_Click() – ゼロ割エラーが起きましたSystem.DivideByZeroException: 0 で除算しようとしました。
場所 WindowsFormsApp18.Form1.button1_Click(Object sender, EventArgs e) 場所 C:\Users\XXXXXX\source\repos\WindowsFormsApp18\WindowsFormsApp18\Form1.cs:行 25
- PG
- ログの出力って開発者にとっては、非常にありがたいツールですよね。私もテスト実行する時には積極的に使用していきます。
- PM
- 上手に活用できれば、開発工数やテスト工数の削減にもつながります。工数削減できれば、きっとリーダーや上司の評価も上がりますよ。
NLogを活用できるかは使うプログラマー次第
NLogは上手に活用できればプログラムのテストを行う際に、とても役立つツールとなることがお分かりいただけたかと思います。エラーの際にはログを出力する設計を取り入れて、ワンランク上のプログラマーを目指しましょう。