log4netの使用方法

log4netを使用するための6ステップガイド

1. プロジェクトにlog4net.dllを追加

プロジェクトにlog4net.dllを参照追加します。これだけでOKです。

2. Log4net名前空間を使用

コードファイルの先頭に以下のusingディレクティブを追加します。

using log4net;

3. プロジェクトのフレームワークバージョン確認

プロジェクトのターゲットフレームワークがlog4net.dllのバージョンと一致していることを確認してください。通常、.NET Framework 4.0を使用します。

4. 設定ファイルの構成

configファイルに設定を記述します。設定は4つの部分に分けられます。

4.1 configurationノード内

2つの方法があります。

<configSections>
  <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
  <!-- または -->
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

4.2 log4netノードの定義

log4netノード内でappenderを定義します。各appenderは異なる出力先に対応しています。

  • ファイル出力
  • データベース出力
  • コンソール出力

他にも様々な出力先がありますが、ここでは代表的なものを示します。

<appender name="FileLogger" type="log4net.Appender.FileAppender">
  <file value="D:/log4netfile.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="yyyyMMdd-HH:mm:ss" />
  <layout type="log4net.Layout.PatternLayout">
    <footer value="by Developer" />
    <conversionPattern value="ログ時間:%date スレッドID:[%thread] ログレベル:%-5level クラス:%logger property:[%property{NDC}] - メッセージ:%message%newline" />
  </layout>
</appender>
<appender name="ConsoleLogger" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>
<appender name="DatabaseLogger" type="log4net.Appender.AdoNetAppender">
  <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
  <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
  <parameter>
    <parameterName value="@logDate" />
    <dbType value="String" />
    <size value="240" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date" />
    </layout>
  </parameter>
  <!-- 他のパラメータも同様に定義 -->
</appender>

4.3 rootノードの定義

rootノード内でappender-refを定義し、複数の出力先を選択できます。

<root>
  <appender-ref ref="FileLogger" />
  <appender-ref ref="ConsoleLogger" />
  <!-- <appender-ref ref="DatabaseLogger" /> -->
</root>

4.4 startupノードの定義

configurationノードの外でstartupノードを定義します。

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>

5. ロギング開始

アプリケーション開始時にロギングを初期化します。コンソールアプリケーションとWebアプリケーションで初期化方法が異なります。

5.1 コンソールアプリケーション

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]

5.2 Webアプリケーション

Global.asax.csのApplication_Startメソッド内で初期化します。

void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();
}

6. ログ記録

ILogインターフェースを使用してログを記録します。記録レベルはdebug, info, error, warn, fatalの5つあります。

ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

logger.Error("エラーが発生しました", new Exception("詳細なエラー情報"));
logger.Fatal("致命的なエラーが発生しました", new Exception("詳細な致命的なエラー情報"));
logger.Info("一般的な情報を記録します");
logger.Debug("デバッグ情報を記録します");
logger.Warn("警告情報を記録します");

Webアプリケーションでは、LogHelperクラスを用いてログ記録を簡素化します。

public class LogHelper
{
    private LogHelper() { }

    private static readonly ILog logger = LogManager.GetLogger("logger");

    public static void LogInfo(string message)
    {
        logger.Info(message);
    }

    public static void LogError(string message, Exception exception)
    {
        logger.Error(message, exception);
    }
}

6.1 ログファイルのローテーション

ファイルサイズや日付によってログファイルを分割します。

日付による分割
<file value="Logs\\LogInfo\\" />
<appendToFile value="true" />
<maxSizeRollBackups value="100" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
ファイルサイズによる分割
<file value="log.txt" />
<appendToFile value="true" />
<maximumFileSize value="1MB" />
<maxSizeRollBackups value="10" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />

6.2 Layoutのパラメータ

layout内のパラメータの意味を説明します。

  • %m: メッセージ
  • %n: 改行
  • %d: 日時
  • %r: 実行時間
  • %t: スレッドID
  • %p: ログレベル
  • %c: ロガー名
  • %f: ファイル名
  • %l: 行番号

例:

<conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />

この設定により、ログは以下のように出力されます。

2010-11-17 16:16:36,561 [9] (Program.cs:10) ERROR Program [(null)] - エラーが発生しました System.Exception: 詳細なエラー情報

タグ: log4net logging .NET C#

9月12日 16:25 投稿