2007年07月24日

Log4cxx

プログラミング時にデバッグ方法はいろいろあるけど、その中でログ出力は一番シンプルかつ重要な方法だ。
バグを追いかけるときに役立つし、その動作の状態がファイルと言う後に残る形式で出力されるからだ。
JavaだとLog4jを使って高機能なロギング機能を使うことができるがC++では・・・。

Log4jをC++に移植したLog4cxxがあるが、なんとググっても日本語での情報が80件しかない。
ふ~む、C++では高機能なロギングは必要とされていないのか?
確かにJavaだとサーバサイドのアプリケーションが多く、そういうアプリケーションにとってはロギングは最重要な関心事だ。致命的なエラー時のログはsyslogに出して担当者にログをメールで送信したり、ログファイルを1日おきとか10Mbyteごとにローテーションしたり。一番重宝するのが"どのファイル"の"何行目"で"どのロギングレベル"でログを出力したかがわかることだ。
C++だとクライアントプログラムが多いからそういう高機能なロギングは必要ないのだろうか。

C++でも「今はこのモジュール開発中だからこのモジュールだけデバッグレベルのログ出力でその他はエラーレベルのログ出力」とかしたいと思うんだけどなぁ。ifdefでデバッグ出力のオンオフは低機能すぎるだろうし、コンパイル時にしかログ出力の設定ができない。

と言う事でとりあえずLog4cxxを使うと言う方向で進めよう。
環境はWindows VistaのVisual Studio 2005 C++

Log4xxの入手は公式サイトで。
ただし、ここにおいてある"最新版"の0.9.7は古すぎる。
CVSリポジトリにある開発版は0.9.7からずいぶん変わっているようだ。0.9.7を使わず、Subversionから最新のソースを取得し、コンパイルする。

コンパイルはビルドツールのantを使う。C++なのにMakefileはもう使わないんだな。Java以外のビルドもantに変わってきているようだ。
INSTALLファイルを参考に、「cpptasks.jar and ant-contrib.jar on CLASSPATH」と「The following files placed in the lib directory: apr-1.2.2.tar.gz apr-util-1.2.2.tar.gz cppunit-1.10.2.gz」をそれぞれダウンロードして指示のとおりにする。

Microsoft Visual C++の場合以下のようにしろと書いてあった。

$> set CLASSPATH=path_to_cpptasks/cpptasks.jar;path_to_antcontrib/ant-contrib.jar
$> path_to_vc\bin\vcvars32
$> ant

1行目のset CLASSPATH=云々はANT_HOMEのlib以下にjarをコピーしたので不要だった。
2行目は最初無視したが、これは無視したらダメで2行目を実行しなかったらコンパイラが不正な処理か何かで強制終了してしまう。
VC++のbin/vcvars32.bat を実行することでコンパイラの環境設定が行われるらしい。vcvars32.batを実行することでLog4jはコンパイルできた。

が、コンパイル後の自動単体テストでAssertion failedになってしまうw
application's support teamにコンタクトを取れと言われるが・・・。

以下のアサーションで失敗している。
Assertion failed: stat == APR_SUCCESS

APRとはApache Portable Runtimeで、WikipediaによるとOSとソフトウェアの間でOSなどの環境の違いを吸収するAPIを提供するとのこと。一応Log4cxxのdllはできているけどAPRのライブラリの使用で落ちているってコトはダメそうな悪寒。

ふいぃ、ロギング環境の構築で今日はギブアップ。もう寝る。

Trackback on "Log4cxx"

このエントリーのトラックバックURL: 

"Log4cxx"へのトラックバックはまだありません。

Comment on "Log4cxx"

"Log4cxx"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。