いまさら聞けない「log4net」の使い方

新人君も4ヶ月近く当社での経験を積んだので、成長の証にLog4netをプロジェクトへ導入する手順を書かせた。



ソリューションへNugetを使って、Packageをインストール

メニューの
 ツール > Nugetパッケージ マネージャー > ソリューションのNugetパッケージ管理

から、オンラインで「log4net」を検索して、該当プロジェクトへインストールする。

#設定ファイルをAssemblyInfo.csへ記述

該当プロジェクトの
 Properties > AssemblyInfo.csを開いて

//Log4Net設定ファイルを指定
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "./設定ファイル名.xml", Watch = true)]

プログラム開始時に、Log4netの設定ファイルの読込ませる

該当プロジェクトのProgram.csに

//アプリケーションのグローバル変数設定
string logFolderName = ログ書込用フォルダのPath;
Environment.SetEnvironmentVariable("グローバル変数名", logFolderName);

//Log4net設定ファイルを読込
//設定ファイルは、AssembleInfo.csへ記述済み
XmlConfigurator.Configure();

Log4netの設定ファイルを作成

AssemblyInfo.csに記述したPathへ、設定ファイルを作成する。

設定
 appender ログを出力するモジュール相当 用意されているタイプを設定
・コンソール
  ・ファイル
 など。

   appenderへ
    ・layout
・File名(Path含む)
    ・日付フォーマット
    ・ファイル切替
   などを設定

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <!-- コンソール出力用 (VS 上 [出力] ウインドウへの出力) -->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <!-- 出力文字列のフォーマット -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="@%-5level&gt;&gt; %message%newline" />
      </layout>
    </appender>

    <!-- 通常ログ:単一ファイル出力 -->
    <appender name="InfoLogDailyAppender" type="log4net.Appender.RollingFileAppender">
      <!-- ファイル名は日付ごと グローバル変数名で設定したフォルダのLogs¥Info_yyyyMMdd.logで出力-->
      <param name="File" value="${グローバル変数名}\Logs\Info_" />
      <param name="DatePattern" value='yyyyMMdd".log"' />
      <param name="RollingStyle" value="date" />
      <param name="StaticLogFileName" value="false" />

      <AppendToFile value="true" />

      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMax" value="Error" />
        <param name="LevelMin" value="Trace" />
      </filter>

      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%date [%-5level] - %message%n" />
      </layout>
    </appender>

    <!-- エラーログ:分割ファイル出力 -->
    <appender name="ErrorLogDailyAppender" type="log4net.Appender.RollingFileAppender">
      <!-- ファイル名は日付ごと -->
      <param name="File" value="${グローバル変数名}\Logs\Error_" />
      <param name="DatePattern" value='yyyyMMdd".log"' />
      <param name="RollingStyle" value="date" />
      <param name="StaticLogFileName" value="false" />

      <param name="AppendToFile" value="true" />

      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMax" value="FATAL" />
        <param name="LevelMin" value="Warn" />
      </filter>

      <param name="MaximumFileSize" value="10MB" />
      <param name="MaxSizeRollBackups" value="10" />

      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%date [%-5level] %class %method - %message%n" />
      </layout>
    </appender>

    <root>
      <!-- 使用する Appender -->
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="InfoLogDailyAppender" />
      <appender-ref ref="ErrorLogDailyAppender" />
    </root>

  </log4net>
</configuration>

以上で設定は完了。

Logを出力

クラスに

//log4net
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);


ログ出力したいところで

 logger.Info("XXX完了");
 logger.Error("XXXX発生");


で、それぞれ、Info、Errorログが出力される。