0

いくつかのプロジェクトで使用するクラス「FooClass」を含むphpファイルがあります。私は最近、次のようにlog4netでロギングするためのメソッドを追加しました。

private static function log($message,$level=0)
{
    if(!isset(self::$logger))
    {
        if(!class_exists("Logger")) return;
        self::$logger = Logger::getLogger("DBw");
        if(!isset(self::$logger)) return;
    }
    //logging
}

FooClassを使用する一部のファイルは、Logger :: configure( "config.xml")を使用して構成を定義できます。しかし、他の人はそれを定義していません。その場合、FooClassはログを「エコー」としてトレースするLoggerConfiguratorDefaultの使用を開始します。これは受け入れられません。

構成が他のファイルによって定義されていないかどうかを確認したいのですが、FooClassはLoggerConfiguratorDefaultでログに記録されませんでした。

LoggerConfiguratorDefaultを無効にする、またはその使用を検出して関数から戻るにはどうすればよいですか?

4

1 に答える 1

1

私は同じ位置にいましたが、ケースが少し異なります。値にアクセスすると構成オブジェクトはログに記録されますが、ロガーの構成ファイルの構成値にアクセスするとログに記録できません。

Loggerlog4phpのクラスには$initialized、プライベート静的メソッドを介してアクセスされるプライベート静的プロパティがありますisInitialized()。Reflectionを使用して静的プロパティの値にアクセスすることで問題を解決し、結果が得られた場合は、ロギングメソッドが呼び出されても何もしないfalse自己作成を返しました。NullLogger extends Logger

あなたのクラスは同じことをすることができるかもしれませんが、より良い解決策はlog4phpが常に初期化されることを確実にすることです。

この問題をより簡単に解決するには、プロジェクトJiraでチケットを作成することをお勧めします。Logger::isInitialized()メソッドをプライベートにする必要はありません。

于 2012-10-19T18:19:16.170 に答える