C#

【C#】NLogを使ってアプリケーションのログ情報を出力させてみた

開発したアプリケーションをリリースした後に、不具合が発生した時に「何が問題なのか」を特定するのに欠かせないのは、ログですよね。
ログ情報があれば、どの処理が原因で発生しているか分かりますし、問題解決までのスピードもグーンと上がります。
アプリケーション開発を行う上で、ログが出力される様に設計しておくことは、とても大切なことなのです。

このサイトでは「NLog」というライブラリーを使って、C#で開発したアプリケーションからログを出力する方法についてご紹介します。

この記事の手順で設定すれば10分程度で準備でき、すぐにログを出力することができるでしょう。
それではやってみましょう。

NLogをインストールする

NLogを導入するために、Nugetからパッケージをインストールします。

今回導入する環境は以下になります。

  • OS:Windows 10 Home
  • 開発環境:Visual Studio 2019
  • 言語:C#
  • 開発プラットフォーム:WPF

Visual Studioを起動して、ログを出力したいプロジェクトを開きます。

ソリューションエクスプローラーのプロジェクト名の上で右クリックし、「NuGet パッケージの管理」をクリックします。

「NuGet パッケージマネージャ」の画面で、『NLog』を検索します。

検索結果内にある『NLog』をクリックして、インストールします。今回インストールするバージョンは「4.7.10」になります。※2021年5月現在の最新バージョン

NLogがサポートしているプラットフォームは多く、C#でよく開発される.NETやUWP、Xamarinなどにも対応しています。

サポートしているプラットフォーム
  1.  .NET 5
  2.  .NET Core 1, 2 and 3
  3.  .NET Standard 1.3+ and 2.0+;
  4.  .NET Framework 3.5, 4, 4.5, 4.6, 4.7 & 4.8
  5.  .NET Framework 4 client profile
  6.  Xamarin Android, Xamarin iOs
  7.  UWP
  8.  Windows Phone 8
  9.  Silverlight 4 and 5
  10.  Mono 4

インストールが完了したら、参照にNLogが追加されていることを確認しましょう。参照に追加されていればインストール成功です。

NLogの初期設定をする

次にNLogでログを出力するための初期設定を行います。ソリューションエクスプローラーから、MainWindow.xaml.csを選択してファイルを開きます。NLogの初期設定を追加していきましょう。

使用する名前空間をusigディレクティブで指定をします。プログラムの先頭に3つの名前空間を指定します。
//参照先を追加
using NLog;
using NLog.Config;
using NLog.Targets;
NLogを初期設定するための関数を追加します。
// ログを出力するロガー定義
static public Logger logger = LogManager.GetCurrentClassLogger();

// NLogを使う為の初期設定
public static void InitializeLogger()
{
    // LoggingConfigurationを生成 
    var config = new LoggingConfiguration();

    // FileTargetを生成し LoggingConfigurationに設定 
    var fileTarget = new FileTarget();
    config.AddTarget("file", fileTarget);

    // fileTargetのプロパティを設定
    fileTarget.Name = "f";
    fileTarget.FileName = "${basedir}/Logs/${shortdate}.log";
    fileTarget.Layout = "${longdate} [${uppercase:${level}}] ${message}";

    // LoggingRuleを定義
    var rule1 = new LoggingRule("*", LogLevel.Debug, fileTarget);
    config.LoggingRules.Add(rule1);

    // 設定を有効化
    LogManager.Configuration = config;
}

InitializeLogger()は、アプリケーションがあるフォルダの階層に自動で「Logs」フォルダを作成します。このフォルダの中に日付毎にファイルを作成し、アプリケーションのログ情報をファイルに記録します。

ログを出力するサンプル

NLogを使用したサンプルコードをみていきましょう。
//参照先を追加
using NLog;
using NLog.Config;
using NLog.Targets;
using System.Windows;

namespace NLogSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // NLogの初期化処理
            InitializeLogger();

            // ログ出力
            logger.Info("NLogを使ってみた!");
        }

        // ログを出力する変数定義
        static public Logger logger = LogManager.GetCurrentClassLogger();

        // NLogを使う為の初期設定
        public static void InitializeLogger()
        {
            // LoggingConfigurationを生成 
            var config = new LoggingConfiguration();

            // FileTargetを生成し LoggingConfigurationに設定 
            var fileTarget = new FileTarget();
            config.AddTarget("file", fileTarget);

            // fileTargetのプロパティを設定
            fileTarget.Name = "f";
            fileTarget.FileName = "${basedir}/Logs/${shortdate}.log";
            fileTarget.Layout = "${longdate} [${uppercase:${level}}] ${message}";

            // LoggingRuleを定義
            var rule1 = new LoggingRule("*", LogLevel.Debug, fileTarget);
            config.LoggingRules.Add(rule1);

            // 設定を有効化
            LogManager.Configuration = config;
        }
    }
}

サンプルを見れば分かりますが、ログを出力する方法はとても簡単です。先程追加したロガーのログレベルを指定し、第1引数にログとして出力させたいメッセージを渡すだけです。

プログラムを実行して、ログが出力されていることを確認しましょう。Logsフォルダの中にあるテキストファイルを開きます。

テキストファイルに下のように記録されていれば、成功です。

ログレベルは6種類ある

ログレベルにログ情報を区別します。例外が発生した時は、エラーとしてログに残したり、一時的な障害が発生した時は、警告としてログに残すことができます。6種類のログレベルがあるので、使い分けてログの情報量を増やしましょう。

  • Debug:デバック中のログを出力するときに使用します。※開発中のみ有効です。
  • Trace:より詳細なデータを出力するときに使用します。※開発中のみ有効です。
  • Info:メッセージを出力したいときに使用します。
  • Warn:一時的な障害に関する警告メッセージを出力したいときに使用します。
  • Error:例外情報を出力するときに使用します。
  • Fatal:非常に重大なエラーメッセージを出力するときに使用します。
//各ログレベルの出力サンプル
logger.Trace("Trace message");
logger.Debug("Debug message");
logger.Info("Informational message");
logger.Warn("Warning message");
logger.Error("Error message");
logger.Fatal("Fatal error message");

指定したログレベルによって以下の様にログが記録されます。

例外が発生したときにエラーレベルでログを出力させたいときは次の様に記載します。
// 例外が発生した時の情報を出力する
try
{
    //例外が発生する処理を意図的に記載
    var str = new string[] { "" };
    str[1] = "";
}
catch (Exception ex)
{
    logger.Error(ex);
}

最後に

NLogを使ってログを出力する方法について紹介しました。ログを残すことで問題が発生したときに素早く問題に対する対処が行えるので、まだログを出力する機能を実装していない方はNLogを活用しましょう。

以上、最後まで読んでいただきありがとうござました。

プログラミングを学習したいなら…

プログラミングスキルを身に付けるなら、プログラミングを効率良く学べる
プログラミングスクール」がオススメです。

特にこんな方にオススメ!!
これからエンジニアを目指したい
プログラミングの専門性を高めたい
プログラミングを学んで副業をしたい
エンジニアに転職して年収をアップさせたい

プログラミングを触ったことがない未経験からでも、プログラミングスクールで学習すれば、エンジニアへ就職・転職することも可能です。

あなたの「行動力」と「やる気」で、あなたの人生を大きく変えるチャンスになることでしょう。

プログラミングスクールに興味がある方は是非チェックしてみてください。

> プログラミングを学ぶ <

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA