ブログ - XoopsLogger と XoopsDatabaseFactory

XoopsLogger と XoopsDatabaseFactory

カテゴリ : 
Customize/Hackメモ » その他
執筆 : 
masa 2008/9/13
ログに若干手を入れたくて XoopsLogger を差し替え

まずは XoopsLogger を継承したクラスを作る。
続いて Legacy_Controller の _setupLogger をオーバーライドする。
これで完璧!簡単で良いなぁ... と思ったら、うまく動かない....
_
インスタンス化はされたようだが、なぜかその後呼ばれない...
ふぅむ。XoopsLogger はシングルトンなのでこの辺が怪しい。
だれか XoopsLogger::instance() を呼んでいるのかな?

案の定 XoopsDatabaseFactory が

$instance->setLogger(XoopsLogger::instance())

です。

それはないよねぇ...

いっそ _setupDB() もオーバーライドして... っていうのは今回はパス!!
(でもそのほうがシンプルだったりして...うーむ....)

しかたないので logger.php をインクルードするのをあきらめ、XoopsLogger のコードをコピーして instance() に細工を施す。

function &instance() {
    return CustomizedLogger::instance();
}

(いや、それなら継承しないで直接書き換えても同じでは? >> 自分)
これでうまくいった。

しかし...
できれば XoopsDatabaseFactory 中で setLogger() をするのはやめて欲しい...
Logger はなくても動くのだし、呼び出し側が自分で setLogger() したほうが良いと思う。
Logger を使いたいか使いたくないかは、呼び出し側の都合なのではないだろうか?

次のバージョンのXCLで変更してくれないかなぁ...
ここなら影響範囲はほとんどないと思うし...

それと Logger はシングルトンじゃなくても良いんじゃないかなぁ...
まぁシングルトンは便利なんだけど、拡張性には難があるし...
個人的にはあまり多用したくないです。
(だから XoopsDatabaseFactory::getDatabaseConnection() もあまり好きじゃない)
  • トラックバック (0)
  • 閲覧 (5584)