0

継承して拡張したいjava.util.logging.Logger。表示されるコンストラクターは

protected Logger(String name, String resourceBundleName)

これは、インスタンスを取得する場合、2つの方法を提供するという事実にもかかわらずです。

static Logger   getLogger(String name)
static Logger   getLogger(String name, String resourceBundleName)  

国際化プロパティファイルと関連オブジェクトを作成せずにコンストラクターを使用できるように、 ある種のデフォルトResourceBundleまたはデフォルト名を取得する方法はありますか?ResourceBundle

もちろん、ラッパークラスを作成しgetLogger(String name)て、名前の必要性を回避するために使用することもできResourceBundleます。残念ながら、これは、使用するすべてのLoggerメソッドにラッパーメソッドを実装する必要があることを意味します。(タイピングが多すぎます)。

編集:ロガーからデフォルトのローカリゼーションデータを取得する次の試みは機能しません。

import java.util.logging.Logger;

class JLogger extends Logger
{
    static Logger dummyLogger = Logger.getLogger("com.dummy.utilities");

    private JLogger(String name)
    {
        super(name, JLogger.dummyLogger.getResourceBundleName());
    }

    static JLogger getJLogger(String name)
    {
        return new JLogger(name);
    }

    public void severe() // a zero arguments version of severe
    {
        severe("");
    }
}

getResourceBundleName()nullを返します。コンストラクターはsuper(name, resourceName)、2番目の引数が。の場合、ロギングを行わないものを作成しますnull

4

1 に答える 1

1

残念ながら、これは、使用するすべてのLoggerメソッドにラッパーメソッドを実装する必要があることを意味します。(タイピングが多すぎます)。

それをする必要はありません、それはすでに行われています。SLF4JとCommonsLoggingを見てください。これらは、java.util.loggingの周り賢明なラッパーを提供し、そのAPIのひどさを隠しています。

これらの2つのAPIは、java.util.loggingを完全にバイパスして、LogbackやLog4Jなどの適切な基盤となるログ実装に委任することもできます。

于 2011-11-01T09:08:13.053 に答える