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: 詳細なエラー情報