ログ出力の方法
やっぱり今回のプログラムはログを出力することが肝になるので、それを考えてみた。最初は至極簡単な自前のクラスを用意して(つまり、ファイルのオープンと書き込みとクローズだけ)、使ってみた。なんか不安(^^; そこで以前 Java で Log4J を使っていたことを思い出し、さらに Log4cxx なる C++ 用のがあったことを思い出し、検索してみたところ、もっと適切な .NET 版 Log4J があることが判明した。やった。ということで、忘れないためのメモです。
参考URL:log4netでデバッグや障害解析に役立つログを出力する
※参考サイトは C# での記述およびバージョンが 1.1 です。うちの環境は VC++2005, .NET Framework 2.0 です。
1. 上記ZIPファイルをダウンロードする
2. ZIPファイルを解凍したら、適当なフォルダに移動しておく。
3. Visual Studio にて、プロジェクトに「新しい参照」を追加する。
追加するDLL:2 で移動した先の 「bin\net\2.0\release\log4net.dll」
4. AssemblyInfo.cpp に以下を追加する
// Log4net 用 [assembly:log4net::Config::XmlConfigurator(Watch=true)];
5. プロジェクトに「新しい項目」を追加して、設定を書き込む
追加する項目:「構成ファイル(app.config)」
以下、例です。参考まで。ファイルへの出力で、DEBUGレベル以上の設定を行っています。
<configuration> <!-- ===================================================================== --> <!-- 構成ファイルの設定 --> <!-- ===================================================================== --> <!-- log4netセクションのハンドラ設定 --> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <appSettings> <!-- log4net内部のデバッグメッセージを出力する場合、trueに設定 --> <add key="log4net.Internal.Debug" value="true"/> </appSettings> <log4net> <!-- ===================================================================== --> <!-- ログ出力先の設定(アペンダーの設定) --> <!-- ===================================================================== --> <!-- ▼ファイル出力用[FileAppender] --> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="Fileサンプル.log" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <!-- ===================================================================== --> <!-- ログ出力の対象レベルと出力先の設定 --> <!-- ===================================================================== --> <!-- ===================================================================== --> <!-- ▼Rootの設定 --> <!-- ※デフォルトとなるログ出力設定 --> <!-- ===================================================================== --> <root> <!-- RootはDEBUG以上を出力 --> <level value="DEBUG" /> <!-- ファイル出力 --> <appender-ref ref="FileAppender" /> </root> <!-- ===================================================================== --> <!-- ▼Loggerの設定 --> <!-- ※名前空間ごとに異なるレベルやアペンダーを選択したい場合に設定 --> <!-- ===================================================================== --> <!-- <logger name="Log4netSample.MyTeam"> <level value="WARN" /> <appender-ref ref="FileAppender" /> </logger> --> </log4net> </configuration>
このファイル(app.config)が、ビルド時だか実行時にだかに「(アプリケーション名).exe.config」で生成されるという記述をみかけたが
自分の環境では、生成されなかった。なので、手動でそのようにコピーしたところ、正常に動作した。ちなみに、Log4J系って設定ファイルが
なくてもエラーにはならずスルーしちゃうんですよね。それはそれでよい仕様だけど、動かしたいときにどんなエラーなのかわからないから
途方にくれることがよくあった。さらにちなむと、app.config を正しく書いておかないとアプリケーションが正しく起動できなくなります。
これは Log4net とは無関係にエラーが表示されます。
6. 実際に使うためのコード
log4net::ILog^ logger = log4net::LogManager::GetLogger(System::Reflection::MethodBase::GetCurrentMethod()->DeclaringType);
logger->Debug("test");
こんな手順でファイル出力まで確認できました。
詳しいことは、参考URLで見てみてください(自分の役割は VC++ で書く部分のみかと思うので)。