2011-03-16 6 views
0

私はZend_Logやその他の必要なクラスをMVCフレームワークなしで使用しています。 Zendのロギング機能(および今後の他のモジュール)をカスタムクラスに追加したいのですが、そのための最良の方法が何であるか疑問に思っています。カスタムクラスでZend_Logを使用する

今私はZendのロガーのラッパーを持っている、おそらく、私はグローバルにアクセスできます。

My_log::log('Testing', Zend_Log::INFO); 

は私がログに記録したい私のクラスの各メソッドにこのコードを追加する必要がありますか。クラス内にログを作成しないでください。もっとスマートな方法がありますか?

私はあなたのアプリケーションを統合することができた場合、ヘルプ、 DC

+0

$this->getLogger()->error('...');

アートを行うことができます。しかし、私はまた、1つの場所で多くの異なるアプリケーションのインスタンスからログにログサーバーにSOAP呼び出しを持っている:( –

答えて

0

依存性の注入コンテナは素晴らしい解決策のように思える感謝しています。すべての静的呼び出しは、テスト環境で問題を引き起こします。

はこのdoc周りを見、私は唯一のポイントは、今あなたが簡単に偽のインスタンスを返す取得するために、テストenvironemntを修正することができるということであるMy_Log::get()->error("message");のような静的なゲッターを作成します http://components.symfony-project.org/dependency-injection/trunk/book/04-Builder

最悪のケースを持っています。あなたのMy_LogのニーズはすべてsetLogger($logger)です。これは、静的インスタンスをモックなどで置き換えます。どのような方法でも静的呼び出しが悪い:/可能であれば、クラスをデカップリングしてできるだけクラスに依存しないようにしてください。あなたのクラスコンストラクタに手動でロガーを注入することも良い考えです。あなたが遅延ロードgetLogger()を提供することができMVCのアクションプラグインやベースコントローラを使用している場合ので、あなたのコードは、ログの概念は今、あまりにも私を悩ませている

関連する問題