aspxページ内(ASP.NET)でログ出力を行う方法(log4net編)

.NET開発環境でログ出力を行うにはいくつか方法がありますが、「log4net」を利用する方法をご紹介します。

また、ASP.NETと普通のアプリケーションでは設定が少し異なりますが、今回はASP.NETの例を。

log4netを利用する理由ですが、以下の理由があります。

  • ファイルのロックを考慮する必要が少ない・・・自前でテキストファイルに各方式だと、複数のスレッドから同時に書かれた場合などに、ファイルをロックして、書き込みエラーが出る場合があります。こういった考慮をlog4netがやってくれるので、便利です。
  • ログのローテーションをやってくれる・・・運用が長期に及ぶと、どうしても、ログファイルの容量が大きくなってきてしまいます。その場合、ファイルをリネームして退避する処理を記述しなければなりませんが、log4netなら簡単な設定ファイルの記述で実行してくれます。

では、早速、ASP.NETのプロジェクトにlog4netのログ出力環境をセットアップしてみましょう。

log4netのセットアップ手順

log4netのダウンロード

まず、log4netのプロジェクトページからモジュールをダウンロードしてきます。

私は今回は、「log4net-1.2.11-bin-newkey.zip」をダウンロードしました。

落としたファイルを解凍すると、「…log4net-1.2.11binnet」というディレクトリができます。

この中に.NETのバージョンごとのフォルダがありますので、自分のターゲットに適したフォルダを見てみましょう。私はターゲットは.net ver3.5なので、「3.5」フォルダの中になります。

その中に、「log4net.dll」と「log4net.xml」があります。

参照を追加

「参照の追加」から、先程確認した「log4net.dll」を追加します。

Global.asaxの追加と編集

Global.asaxがプロジェクトに存在していない場合は、「新しい項目の追加」から、「グローバル アプリケーション クラス」を追加しましょう。

それでは、Global.asaxのメソッド、Application_Startに以下の一文を記述します。

//VB.netの場合

log4net.Config.XmlConfigurator.Configure(New System.IO.FileInfo("c:/conf/log4net.xml"));

//C#の場合

log4net.Config.XmlConfigurator.Configure(newSystem.IO.FileInfo("c:/conf/log4net.xml"));

log4net.xmlの配置と編集

上記のコードで指定した場所に、「1.」で確認したlog4net.xmlをコピーして置き、以下の編集を行います。元々の設定ファイル「log4net.xml」にはいろいろな設定があるので、シンプルに、丸ごと以下の記述としました。

<?xmlversion="1.0"encoding="utf-8"?>

  <configuration>

    <log4net>

      <appendername="LogFileAppender"type="log4net.Appender.FileAppender">

        <Filevalue="C:logmudebug.log"/>

        <AppendToFilevalue="true"/>

        <layouttype="log4net.Layout.PatternLayout">

          <ConversionPatternvalue="%d [%t] %-5p %c - %m%n"/>

        </layout>

      </appender>

      <root>

        <levelvalue="DEBUG"/>

        <appender-refref="LogFileAppender"/>

      </root>

    </log4net>

  </configuration>

ログ出力のコードを記述

では、実際にログを出力したいクラスに記述を行います。

クラスの最初に、

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

を書き、出力部分で、

logger.Debug(“ログの出力!”);

と書きます。

実行してみると、以下のように書かれました。

2012-06-14 13:42:10,926 [4] DEBUG SFDCService._Default – ログの出力!