.NET の ログクラス NLogを使用する

● NLogのインストール

NuGetからインストールします。 Visual Studioなら「ソリューションエクスプローラー」を右クリックして「NuGetパッケージの管理」から「NLog」を検索してインストールします

● NLogの使い方

  1. NLogを使いたいクラスにプロパティ logger をセットします。

         private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
    
  2. ログへ出力します

    logger.Info( "情報ログ" );
    logger.Debug( "デバッグログ" );
    logger.Trace( "トレースログ" );
    

● NLogのログレベル

ログにはレベルが存在します。レベルによって処理を分けたりするためです。
(エラーの時は別ファイルに保存したり、エラーの時はメールを送信したりといった感じです。)

(NLogのログレベル。上から順に需要)

  logger.Fatal("致命的レベル");
  logger.Error("エラーレベル");
  logger.Warn("警告レベル");
  logger.Info("情報レベル");
  logger.Debug("デバッグレベル");
  logger.Trace("トレースレベル");

● ログの設定

NLog.Config というファイルがインストール時に自動生成されます (自動生成されないこともあります。) その時は以下のようなファイル NLog.Config を プロジェクトのフォルダに作成します。

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">

<targets>
  <target name="normal" 
          xsi:type="File" 
          encoding="UTF-8" 
          lineEnding="LF" 
          fileName="${basedir}/logs/event.log" 
          layout="[${longdate}] [${uppercase:${level:padding=5}}] ${callsite}() [${message}] ${exception:format=tostring}" 

          archiveNumbering="Date" 
          archiveFileName="${basedir}/logs/archive/{#}-event.log" 
          archiveEvery="Day" archiveDateFormat="yyyyMMdd" 
          maxArchiveFiles="7" />

    <target name="error" 
            xsi:type="File" 
            encoding="UTF-8" 
            lineEnding="LF" 
            layout="[${longdate}] [${uppercase:${level:padding=5}}] ${message} - ${callsite}() ${exception:format=tostring}" 
            fileName="${basedir}/logs/error.log" 
            archiveNumbering="Date" 
            archiveFileName="${basedir}/logs/archive/{#}-error.log" 
            archiveEvery="Day" archiveDateFormat="yyyyMMdd" 
            maxArchiveFiles="7"/>

</targets>

  <rules>
      <logger name="*" minlevel="Info" writeTo="normal" />
      <logger name="*" minlevel="Trace" writeTo="normal" />
      <logger name="*" levels="Error,Fatal" writeTo="error"/>
  </rules>

</nlog>

${basedir} というのが出てきますが、これは AppDomain.CurrentDomain.BaseDirectory の事です。
場所がわからない場合は次のようにして確認してみてください。

Debug.WriteLine( AppDomain.CurrentDomain.BaseDirectory );

● try catch で使用する

DB処理など try catch したい場合は次のように記述します

                try
                {
                    logger.Info( "DB処理 - 開始" );
                    // ここにDB処理
                    logger.Info( "DB処理 - 正常完了" );
                }
                catch (Exception ex)
                {
                    logger.Error( ex );
                    throw;
                }
No.1241
06/05 20:40

edit