0

私は図書館を書いています。このライブラリは、log4jロガーとjava.util.loggingロガーを使用するアプリケーションで使用できます。

そこで、両方のロガーをカプセル化するクイックラッパークラスを作成しました。アプリケーションが一方または両方のロガーを設定できるようにします。そして私のライブラリでは、カプセル化されたクラスを使用していずれかのロガーに出力します。

私の質問は、多くのスレッドがラッパークラスの同じインスタンスを同時に使用して、クラスのメソッド(たとえば、以下のfatal())を使用してメッセージをログに記録できるため、これらのメソッドをスレッドセーフにするためにどのような手順を実行する必要がありますか?

public class MultiLogger {
    private static org.apache.log4j.Logger _log4jLogger = null;
    private static java.util.logging.Logger _javaUtilLogger = null;

    private MultiLogger () {
    }

    // log4j FATAL, log util SEVERE
    public void fatal (Object message) {
        if (_log4jLogger != null) {
            _log4jLogger.log("", Level.FATAL, message, null);
        }

        if (_javaUtilLogger != null) {
            _javaUtilLogger.severe((String) message);
        }
    }
    ...
}

他のコメントもありがたいです。

4

3 に答える 3

3

オプション1:質問へのコメントによるslf4j。

オプション2:cxf.apache.orgにはそのようなデバイスが含まれています。slf4jには国際化サポートがないため、slf4jの代わりに使用します。コードを取得することを歓迎します。

于 2009-11-20T01:12:31.827 に答える
1

私のコメントを参照してください:

このライブラリを続行する前に、slf4jをチェックアウトする必要があります。すべての主要なロギングライブラリをラップし、非常に高品質です。

ただし、ラッパークラスは、ラップするロガーと同じ方法で使用されると思います。その場合、ラップされたクラスが同期を処理する必要があります。

于 2009-11-20T01:12:02.937 に答える
0

上記のようにlog4jとutilLoggerを使用しているだけであれば、同期の問題が発生することはないと思います。

于 2009-11-20T01:12:59.967 に答える