2009-05-26 3 views
0

私はjava.util.logging機能の使い方を理解しようとしています。すべてのチュートリアルでは、メインクラスからログファイルにログを出力する方法が示されていますが、さまざまなクラスのファイルにどのようにログできるかはわかりません。私はWebサービスとWebサービスクライアントを持っており、Webサービスクライアントを使用している間にWebサービスでエラーを記録できるようにしたいと考えています。いくつかのクラスとパッケージにわたって1つのファイルにjava loggerを追加

私はロガークラスを作成しようとしましたが、38個の空のログファイルがありました。 Webサービス上の各クラスで呼び出されるロガーを1つ作成するにはどうすればよいですか? Webサービスには2つの異なるパッケージとさまざまなクラスがあります。

私の検索では、シングルトンロガークラスのアイデアが出てきました。私はそれを実装する方法を把握しようとしている:

public class Logger{ 

private static Logger self = new Logger(); 

//empty private constructor 
private Logger(){ 

} 

//synchronized getInstance 
public static synchronized Logger getInstance(){ 
    if (self == null) 
     self = new Logger(); 
    return self; 
} 

//prevent cloning 
public Object clone() throws CloneNotSupportedException { 
    throw new CloneNotSupportedException(); 
} 

//synchronized logging 
public synchronized void debug(String msg){ 

} 
public synchronized void info(String msg){ 

} 
public synchronized void fatal(String msg){ 

} 

}

を私の他のクラスでこれを呼び出すには、私は各クラスでのFileHandlerを作成する必要があるでしょうか?

答えて

2

これは、JDK logging frameworkにはHandlersがあります。ロガー階層のルートにあるロガーにFileHandlerを追加すると、すべてがそのファイルハンドラーに記録されます。ハンドラには独自のログレベルがあることに注意する必要があります。

したがって、独自のログフレームワークを実装する必要はありません。それはすでにそこにあり、それはすでに良いです。 (JDKロギングが気に入らない場合は、Apache Commons LoggingをJDKロガーまたはlog4jとしてください)

+0

「ルート」ロガーを設定する方法がわかります。 私はクラスを持っている場合: client.alerts.AlertHandler client.alerts.AlertTimer client.alerts.Connect client.weather.Weather client.weather.WeatherData は、私は私ができるので、これらのそれぞれに何を置きます1つのファイルにログする。私が見つけたすべての例は、1つのクラスから1つのログファイルへのログの記録方法を示しています。私は複数のクラスから1つのログファイルにログを取る方法を知らない。私の「ロガー階層」の根はどこですか? – ravun

+0

JDKでは、 "client"という名前のロガーが適切なルートロガーになります。ロガーに親がなくなるまで、Logger.getParent()を使用してロガーの親を取得することもできます。ルート・ロガーを使用している場合は、Logger.addHandler()を使用してロガーにハンドラーを追加してください。最後にHandler.setLevel()を使用してハンドラのログレベルを調整すると、すべて設定されているはずです。 – Bombe

関連する問題