1

jarその usesから取得したコードがありますjava.util.logging.Logger

Jar には約 1000 のロガーの使用法が含まれており、各クラスは次から始まります。

private static final Logger LOG = Logger.getLogger(SomeClass.class.getName());

そこにあるすべてのログを処理したいのですが、つまり、それらを Logger の使用法ではなくjava.util.logging.Logger.

したがって、私は自分のロガーを書きました。

代わりに:

LOG.log(Level.SEVERE, "Error sleeping", e);

私は書くことができます:

 MyLogger.toLog(TLogLevel.WFS_ERROR, "Monkey", "Error sleeping", e );

問題は、すべての Java ファイルを実行して、自分のものに置き換える必要があることです。

厄介な方法、うーん

java.util.logging.Loggerに変換する簡単な方法を知っている人はいますcom.boo.MyLoggerか?

ありがとう、

4

3 に答える 3

6

SLF4J プロジェクトには、 java.util.logging.Logger 呼び出しを SLF4J にリダイレクトするために使用できるjul-to-slf4j ブリッジがあります。それを使用できます(MyLoggerにSLF4Jで定義されたインターフェースを実装させることにより)。

ただし、他のすべてのログ ライブラリとは異なり、jul は Java クラス ライブラリに組み込まれているため、ブリッジするとパフォーマンスが低下することに注意してください。

また、MyLogger で何をしているのかわかりませんが、通常は自分で作成する必要はありません。選択できるロギングの実装は多数あり、さまざまな方法で構成できます。また、独自の Logger実装を作成する必要がある場合でも、既存のインターフェイス(最近最も人気があると思われる SLF4J など) を使用する必要があります。

于 2013-05-21T12:14:39.877 に答える
1

Oracle の Java 7 Logger は構成可能で、その実装は単純です。

public static Logger getLogger(String name) {
    // This method is intentionally not a wrapper around a call
    // to getLogger(name, resourceBundleName). If it were then
    // this sequence:
    //
    //     getLogger("Foo", "resourceBundleForFoo");
    //     getLogger("Foo");
    //
    // would throw an IllegalArgumentException in the second call
    // because the wrapper would result in an attempt to replace
    // the existing "resourceBundleForFoo" with null.
    LogManager manager = LogManager.getLogManager();
    return manager.demandLogger(name);
}

したがって、コードを介してログ レベルを設定することもできます。宣言的以外に。

LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME).setLevel(Level.INFO);

Lars Vogelには、独自の Logger クラスを備えた素晴らしいページがあります。

すべてをまとめると非常にうまく機能しますが、理解するのが少し難しい場合があります。

于 2013-05-21T12:42:11.100 に答える