* 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 レベルにして、運用時などは出力しないようにする方が良いでせう。
 
 ** log4net.config はどこに置けば良い? [#y79f5f1f]
 
 基本的に AssemblyInfo.cs に指定した位置。
 
  [assembly: log4net.Config.XmlConfigurator(ConfigFile=@"log4net.config", Watch=true)]
 
 ConfigFile の値は絶対パス(フルパス)でも相対パスでも良いので、
 確実に参照させたいなら絶対パスで書いてしまえば間違いない。
 ただ、通常は config ファイルはプロジェクトに含めたいところなので、
 相対パスで書く方が柔軟性がある。
 
 *** Windows アプリケーションの場合 [#oc8bc5b8]
 
 AssemblyInfo.cs に、
 
  [assembly: log4net.Config.XmlConfigurator(ConfigFile=@"log4net.config", Watch=true)]
 
 と書いた場合は、実行モジュール(.exe など)と同じ位置になる。
 ただ、大抵の場合、実行モジュールは bin\Debug や bin\Release などのフォルダの下にできるので、
 共通の config ファイルを参照するために、プロジェクトファイルと同じ位置
 (実行モジュールから見たら 2 つ上の階層)を見るように設定するのが妥当らしい。
 
 つまり、
 
  [assembly: log4net.Config.XmlConfigurator(ConfigFile=@"..\..\log4net.config", Watch=true)]
 
 となる。
 
 ただ、リリース時はここを書き換える必要があるか。
 
 *** Web アプリケーションの場合 [#y6e7b9e7]
 
 AssemblyInfo.cs に、
 
  [assembly: log4net.Config.XmlConfigurator(ConfigFile=@"log4net.config", Watch=true)]
 
 と書いた場合は、Web アプリケーションのルートということになるが、
 それは一体どこかというと、どうやらプロジェクトファイルがある場所らしい。
 (コンパイルすると、実行モジュール(.dll)は bin の下にできるので、
 てっきりそこがルートかと思いきや、違った。)
 
 なので、config ファイルをプロジェクトと同じ位置に置くのであれば、
 上の記述で問題ない模様。
 
 
 *** アプリケーションの config に書いてしまう方法 [#m538619a]
 
 log4net.config というファイルを別に用意するのでなく、
 アプリケーションの config ファイルに書き込んでしまう手もある。
 
 つまり、Windows アプリケーションなら app.config,
 Web アプリケーションなら web.config に、
 log4net.config の内容を埋め込んでしまう。
 
  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <configSections>
        <section name="log4net"
            type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
     </configSections>
     
     <appSettings>
        <!-- log4net内部のデバッグメッセージを出力する場合、trueに設定 -->
        <add key="log4net.Internal.Debug" value="true"/>
     </appSettings>
     
     <log4net>
        
        <!-- ここに log4net.config の内容を記述。 -->
        
        <appender name="DailyAppender" type="log4net.Appender.RollingFileAppender">
           <!-- ファイル名 -->
           <param name="File" value="trace.log" />
           <!-- 追記する場合 true / 上書きする場合 false -->
           <param name="AppendToFile" value="true" />
           <!-- 日付や時刻の制約によるログファイルの切替 -->
           <param name="RollingStyle" value="Date" />
           <!-- 上から「毎月、毎週、毎日、半日、毎時、毎分」の設定(デフォルトは毎日) -->
           <!-- <param name="DatePattern" value="yyyy-MM" /> -->
           <!-- <param name="DatePattern" value="yyyy-ww" /> -->
           <!-- <param name="DatePattern" value="yyyy-MM-dd" /> -->
           <!-- <param name="DatePattern" value="yyyy-MM-dd-a" /> -->
           <!-- <param name="DatePattern" value="yyyy-MM-dd-HH" /> -->
           <!-- <param name="DatePattern" value="yyyy-MM-dd-HH-mm" /> -->
           <param name="DatePattern" value="yyyy-MM-dd" />
           <!-- 保存するファイル数(数を超えた場合は古いものから削除) -->
           <param name="MaxSizeRollBackups" value="7" />
           <param name="StaticLogFileName" value="true" />
           <layout type="log4net.Layout.PatternLayout">
              <param name="ConversionPattern" value="%d [%t] %-5p - %m%n" />
           </layout>
        </appender>
        
        <root>
           <!-- 出力レベル -->
           <level value="INFO" />
           <!-- 使用する Appender -->
           <appender-ref ref="DailyAppender" />
        </root>
        
     </log4net>
  </configuration>
 
 とか。
 
 この場合は、AssemblyInfo.cs に ConfigFile の値を記述する必要はない。
 
 つまり、
 
  [assembly: log4net.Config.XmlConfigurator(Watch=true)]
 
 これでOK。
 
 ** 関連 [#sc8f78dd]
 
 - [[log4cpp]]
 
 -----
 [[プログラム・開発系メモ]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS