2011-02-08 4 views
2

Javaアプリケーションでのロギングに関する質問があります。私は主なユーザーアクションと考えられるエラーをユーザーフレンドリなメッセージで記録したいと思います。したがって、私はロガーのための2つのアペンダーを持っています:1つはダイアログでエラー(レベル=エラー)を表示し、もう1つは現在のユーザーセッションのログをhtmlファイルに書き込み、何か問題が起きたときにこのファイルを返すことができます。すべてのクラスでロガーの作成を避けるためにJavaアプリケーションでのロガーへのアクセス

(プライベートロガーロガー= ...)私もロガーにアクセスするためのメソッドを持つクラスAppで構成されたロガーの静的な参照があります

public class App { 
    private static Logger logger = Logger.getLogger("logger name"); 
    … 
    public static void logError(String message, Throwable cause) { 
    … 
    } 
    public static void logInfo(String message) { 
    … 
    } 
} 

をロギングは主にUIクラスで行われます:

class UIWidget extends UIFrameworkWidget { 

    void aMethod() { 
     try { 
      someBusinessLogic(); 
     } catch (Exception e) { 
      App.logError(“log message”, e); 
     } 
    } 
} 

これは良い方法ですか? (ウィジェットはフレームワークによって作成されることに注意してください。)

感謝をより良いこの

答えて

2

の回答、コメント、ヒントのために事前に単一の静的Loggerインスタンスを使用しますが、各クラスがプライベートを作成できるようになりますクラスの名前で初期化されたインスタンスです(他の情報もあります)。このプライベート・インスタンスは、静的インスタンスを使用して実際にロギングを実行しますが、必要に応じて省略でき、外部クラスへの参照を減らすことができます。

これは、使用するログフレームワークであるslf4jの処理方法ですが、同じ方法で自分自身をロールバックすることもできます。

ただし、明示的に追加する必要があるダイアログボックス内にエラーメッセージを表示する方法はわかりません。

2

JDK Loggerをサブクラス化するだけのステップだと思います。静的インスタンスを1つしか持たないため、実行時に特定のクラスを対象とすることができません。ロガーをサブクラス化すると、まだロギングされたクラスとして多くのロガーがありますが、アペンダーの特質を維持することができます。

独自のレイアウトを作成することもできます(少なくとも、log4jではプレースホルダを追加することもできます - これはgeronimoの例です)。

関連する問題