Apache Moduleの作り方(3)
・その7
mod_backtraceで、どの関数で落ちたか分かるようになってそれはそれで便利に。
が、やっぱりデバッガ使いたい。
(エラー箇所のメモリの番地しかわからず、addr2lineの使い方もよくわからん)
今回作ろうとしているものは、「XMLを入力にして、データをかき集めて加工し、(XMLとは)別な形式で出力する」というもの。
あまりapacheのアーキテクチャーとは関係のない部分が多かったので、コマンドラインからも動かせるようにリファクタリング。(APRには依存しても、apacheには依存しないように修正)
一番のネックはロギングで、一番末端のロジックまでapacheが密着してしまっている。
マルチスレッドに対応しないといけないので、グローバル変数に頼るわけにもいかず困った。
結局、ログ出力関数をloggerクラスとしてラップし、これを各クラスで持ちまわすことで対応。
(ロジック中は抽象クラスで書いて、モジュール版はap_log_rerrorに出力するサブクラス、コマンドライン版ではstderrに出力するサブクラスをリンク)