* log4net [#x3a7a3d7]
多分、log4cpp とほぼ同じだと思うけど。

** ダウンロード [#f121c9be]

- [[Apach log4net:http://logging.apache.org/log4net/]]

ここの Downloads からソース一式をダウンロードする。Stable というのが安定バージョンなので、大抵は Stable をいただく。

アーカイブの中にはバイナリ(dll)も同梱されていて、それらはそのまま使用することができるが、ここはやっぱりカスタマイズして使いたいので、ソースもコンパイルすることにする。

** コンパイル [#n46b26ca]
プロジェクト(ソリューション)は、src ディレクトリに入っている。これは多分一番古いバージョンの Visual Studio プロジェクトなので、新しいバージョンの VS ファイルにコンバートする(問い合わせが出るので「はい」で)。

log4net.sln を開くと、log4net.csprj と log4net.Tests.csprj という2つのプロジェクトが開くが、log4net.Tests.csprj の方は NUnit のテストプロジェクトなので、NUnit を入れていないとコンパイルできない。NUnit を入れてもいいが、面倒なら「プロジェクト」→「プロジェクトのアンロード」でアンロードしてコンパイル対象外にしてしまって良い。または、最初から log4net.csprj を直接開いて、新しいソリューションファイルをつくっても良い。

このまま「ビルド」すると、Debug ビルドの方は上手くいくが、Release ビルドは通らない。

 error CS1548: アセンブリ 'log4net.dll' を署名しているときに
 暗号に失敗しました -- 'キー ファイル '..\..\..\log4net.snk' 
 の読み込み中にエラーが発生しました -- 指定されたファイルが
 見つかりません。 '

というようなエラーが出る。

log4net.snk.readme を見ると、キーファイルをつくる必要があるというようなことが書いてあるので、書いてある通りに作成する。

 sn -k log4net.snk

sn というのは .NET のツール。

 (Program Files)\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin

に入っているが、おそらくパスが通っていない。ただ、「スタート」→「Visual Studio .NET ツール」からコマンドプロンプトを立ち上げれば、パスを通さずともこのコマンドがそのまま動作する。

最後の引数をファイル名のみにすると、(My Documents)\(ログイン名) ディレクトリに log4net.snk が作成される。

あと、AssemblyInfo.cs の最後の行で、log4net.snk の位置指定が3つ階層を上がった場所に置くことになっている。これの意図が不明なので、私はソリューションと同じ位置に置いて、ファイル名のみの指定とした。

 #if STRONG && (CLI_1_0 || NET_1_0 || NET_1_1 || NETCF_1_0 || SSCLI)
 [assembly: AssemblyDelaySign(false)]
 //[assembly: AssemblyKeyFile(@"..\..\..\log4net.snk")]
 [assembly: AssemblyKeyFile(@"log4net.snk")]
 #endif

これで、Relese もコンパイルできるはず。

ちなみに、出来合いのバイナリ(dll)は bin ディレクトリに入っているが、プロジェクトをコンパイルすると、 build というディレクトリの中にバイナリ(dll)が作成される(プロジェクトの設定がそうなっているので)。

** 使い方 [#y2f83dfa]
あとは、ここらへんを参考に。

- [[log4netでデバッグや障害解析に役立つログを出力する:http://codezine.jp/a/article.aspx?aid=71]]

ただ、このページの通りに log4net.Config.DOMConfigurator を設定すると、

 warning CS0618: 'log4net.Config.DOMConfiguratorAttribute' は古い形式です :
 'Use XmlConfiguratorAttribute instead of DOMConfiguratorAttribute'

というような警告がでるので、DOMConfigurator ではなく XmlConfigurator を使う。

 [assembly: log4net.Config.XmlConfigurator(Watch=true)]

*** 参考 [#r08ea0c2]

''PatternLayoutで指定できるパターン''&br;

|BGCOLOR(#CCFFCC):パターン|BGCOLOR(#CCFFCC):説明|
|%c|ログ出力が行われたlogger名を出力。|
|%C|クラスを出力。|
|%d|日時を出力。「%d{yyyy/mm/dd HH:mm:ss}」といった詳細指定も可能。|
|%F|ファイル名を出力。|
|%l|ソース名や行といった呼び出し位置を出力。|
|%L|行番号を出力。|
|%m|メッセージを出力。|
|%M|メソッド名を出力。|
|%n|改行文字を出力。|
|%p|ログのレベル(Fatal/Errorなど)を出力。|
|%t|ログを生成したスレッドを出力。|
|%x|スレッドのNDC(ネスト化診断コンテキスト) を出力。スレッド固有の情報(セッションIDなど)を埋め込むことができる。|
( [[CodeZine:http://codezine.jp/a/article.aspx?aid=71]] より )&br;

上記のうち、 %C、%F、%l、%L、%M は処理負荷が高くなるらしい。
DEBUG レベルにして、運用時などは出力しないようにする方が良いでせう。

** 関連 [#sc8f78dd]

- [[log4cpp]]

-----
[[プログラム・開発系メモ]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS