私は現在、独自のロギングソリューションからlog4phpに移行中です。
プロジェクトでは、静的メソッドのみを含む多くのクラスを使用しています。ドキュメントでは、次のような基本的なユースケースを定義しています。
class MyClass {
private $logger;
public function __construct() {
$this->logger = Logger::getLogger(__CLASS__);
$this->logger->debug('currently in constructor');
}
}
しかし、それを使用することはできません$logger
。静的なコンテキストでも使用できる必要があるためです。クラスのコンストラク$logger
ターが呼び出されることはないため(すべてのメンバーが静的であるため)、静的にすることも役に立ちません。
ドキュメントには、そのメンバーに静的初期化子を使用するように指示されています。しかし、それなら、私が使用するすべてのクラスについて、それを呼び出すことを忘れないでください。そして、それはエラーが発生しやすいようです。
だから私はこれを思いついた:
class Foo {
private static $logger = null;
private static function logger() {
if( null == self::$logger ) self::$logger = Logger::getLogger( __CLASS__ );
return self::$logger;
}
public static function bar() {
self::logger()->debug( "test" );
}
}
Foo::bar();
しかし、それもオーバーヘッドが大きすぎるようです。それで、何か提案はありますか?