多分、log4cpp とほぼ同じだと思うけど。
ここの Downloads からソース一式をダウンロードする。Stable というのが安定バージョンなので、大抵は Stable をいただく。
アーカイブの中にはバイナリ(dll)も同梱されていて、それらはそのまま使用することができるが、ここはやっぱりカスタマイズして使いたいので、ソースもコンパイルすることにする。
プロジェクト(ソリューション)は、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)が作成される(プロジェクトの設定がそうなっているので)。
あとは、ここらへんを参考に。
ただ、このページの通りに log4net.Config.DOMConfigurator を設定すると、
warning CS0618: 'log4net.Config.DOMConfiguratorAttribute' は古い形式です : 'Use XmlConfiguratorAttribute instead of DOMConfiguratorAttribute'
というような警告がでるので、DOMConfigurator ではなく XmlConfigurator? を使う。
[assembly: log4net.Config.XmlConfigurator(Watch=true)]