.NETプロジェクトにログ出力ライブラリ(log4net)を組み込む

プログラミング

Visual Studio 2022で、C#.NETプロジェクトにlog4netを組み込む手順を紹介します。今回紹介するのは、僕が作るプロジェクトでよく使用する出力方法です。後述するlog4netパラメータを適宜変更して使用してください。

Nugetから最新の安定版をインストール

Nugetから、最新の安定バージョンを対象のプロジェクトにインストールします。

Package.configを確認

Package.configに、以下が追記されていることを確認します。
 以下の文字列は、「log4netのバージョンは◯◯で、プロジェクトのターゲット.NETframeworkバージョンは◯◯ですよー」と書いてあるだけなので、あまり気にしないでいいです。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="log4net" version="2.0.15" targetFramework="net48" />
</packages>

AssemblyInfo.csに追記

AssemblyInfo.csの末尾に、以下を追記します。
 以下の文字列は、「log4netの設定は、AppConfigにXMLで記述しますよー」と宣言しています。

// log4net用設定
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

App.configに追記

App.configの<configration>セクション内に、log4netセクションを定義します。
 以下の定義では、ログファイルを情報ログ・動作確認ログ・異常ログの3種類に分別しています。
 情報ログと動作確認ログは、指定サイズ超過でログファイルの切替えを行い、
 異常ログは日付変更でログファイルの切替えを行います。
 各種パラメータは、以下に記載しているもの以外にも、色々と定義ができます。
 詳しくは、https://logging.apache.org/log4net/release/config-examples.htmlを参照ください。

<log4net>
    <!-- 情報ログ(Info) -->
    <appender name="InfoLogAppender" type="log4net.Appender.RollingFileAppender">
      <!-- ログファイル名 -->
      <File value="..\Log\Info.log"/>
      <!-- 追加書込み -->
      <AppendToFile value="true"/>
      <!-- ファイルBackupの条件(Maxサイズ超過で切替) -->
      <rollingStyle value="Size"/>
      <!-- 最大ファイルサイズ -->
      <MaximumFileSize value="1MB"/>
      <!-- ログファイルバックアップ数 -->
      <MaxDateRolBackups value="10"/>
      <!-- どのログ種類を対象とするか(Infoのみ) -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <LevelMax value="INFO"/>
        <LevelMin value="INFO"/>
      </filter>
      <!-- ログ出力内容 -->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] [%class] [%method] %message%newline"/>
      </layout>
    </appender>
    <!-- 動作ログ(Debug) -->
    <appender name="AppLogAppender" type="log4net.Appender.RollingFileAppender">
      <!-- ログファイル名 -->
      <File value="..\Log\Debug.log"/>
      <!-- 追加書込み -->
      <AppendToFile value="true"/>
      <!-- ファイルBackupの条件(Maxサイズ超過で切替) -->
      <rollingStyle value="Size"/>
      <!-- 最大ファイルサイズ -->
      <MaximumFileSize value="1MB"/>
      <!-- ログファイルバックアップ数 -->
      <MaxSizeRollBackups value="1"/>
      <!-- どのログ種類を対象とするか(Debugのみ) -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <LevelMax value="DEBUG"/>
        <LevelMin value="DEBUG"/>
      </filter>
      <!-- ログ出力内容 -->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] [%class] [%method] %message%newline"/>
      </layout>
    </appender>
    <!-- 異常ログ(Warn, Error, Fatal) -->
    <appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
      <!-- ログファイル名(先頭部分) -->
      <File value="..\Log\Error"/>
      <!-- 追加書込み -->
      <AppendToFile value="true"/>
      <!-- ファイルBackupの条件(日付変更で切替) -->
      <rollingStyle value="date"/>
      <!-- ログファイル名が固定ではないので"false"を指定 -->
      <staticLogFileName value="false"/>
      <!-- ログファイル名(後半部分) -->
      <datePattern value="yyyyMMdd.log"/>
      <!-- ログファイルバックアップ数 -->
      <MaxDateRolBackups value="30"/>
      <!-- どのログ種類を対象とするか(Warn, Error, Fatal) -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <LevelMax value="FATAL"/>
        <LevelMin value="WARN"/>
      </filter>
      <!-- ログ出力内容 -->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%-5level] [%thread] [%class] [%method] %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="InfoLogAppender"/>
      <appender-ref ref="AppLogAppender"/>
      <appender-ref ref="ErrorLogAppender"/>
    </root>
  </log4net>

ログクラスを定義

プログラムでログを使用するため、ログ用クラスを定義します。

public class Log
    {
        /// <summary>
        /// log4netインスタンス
        /// </summary>
        public static log4net.ILog Trace = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    }

おわり

以上で、ログ出力のための準備は終わりました。
あとは、ログを出したいところで、以下のように記述してください。

Log.Trace.Info("プログラム開始");         // 情報ログ
Log.Trace.Error("異常が発生しました");    // 異常ログ(通常エラー)
Log.Trace.Fatal("プログラム起動失敗");    // 異常ログ(致命的エラー)
Log.Trace.Debug("デバッグ中");            // 動作ログ
タイトルとURLをコピーしました