2

MVC アーキテクチャを使用して、非常に単純な JSP/サーブレット Web プロジェクトを作成しています。

プロジェクトに log4j によるロギングを追加するための前提条件があります。これまで Log4j を使用してロギングを実装したことがないので、効率的な方法で実装する方法についていくつかのヒントを聞きたいです。

な関心事は、別のメッセージを書きたいと思うたびに新しいオブジェクトを作成せずに、プロジェクト全体でロギングを担当するオブジェクトを共有する方法です。
また、ファイル構造とメッセージ構成についてはどうですか? 日付ベースの操作とユーザー アクションに関する情報を別のファイルに記述するのと、1 つのファイルに記述するのとではどちらがよいでしょうか?

奇妙に聞こえるかもしれませんが、私は初心者なので、これについて経験のある人のコメントを聞きたいです:)

事前にみんなに感謝します!

4

1 に答える 1

1

log4j では、オブジェクトごとではなく、カテゴリごとに logger オブジェクトが必要になります。一般に、コントローラー、サービス、daos などはシングルトンであることが多いため、それぞれにロガー オブジェクトをインスタンス変数として含めることは問題ありません。あなたは次のようなものを書くでしょう

public void MyServiceImpl implements MyService {
    private Logger logger = Logger.getLogger(getClass());

    ....
}

すべてが独自のロガー (およびサービスと daos の同上) を必要とする一連のコントローラーがある場合は、その Logger 宣言を抽象ベースコントローラー (サービスと daos の同上) に配置することもできます。これは、保護されたフィールド、または getter を使用したプライベートにすることができますが、ロギング カテゴリが重要であるため、コントローラー (サブ) クラスごとにロガーが必要になります。

もちろん、ロガーが多すぎるのは当然の懸念事項であるため、クラスがシングルトンでない場合は、別のことを行う必要があります。数十または数百のドメイン オブジェクトにロギングを追加する場合、ドメイン オブジェクトごとにロガー オブジェクトを作成する必要はありません。この場合、私はロガーをクラス変数として使用しました (他の人が使用しているのを見ました)。たとえば、次のようになります。

public void MyDomainObject {
    private static Logger logger = Logger.getLogger(MyDomainObject.class);

    ....
}

ロギングの「アーキテクチャ」に関する限り、アプリケーション アーキテクチャに従ってください。アプリケーション アーキテクチャで問題が適切に分離され、すべてが適切に階層化され、クラスとインターフェイスに適切な名前が選択されている場合、ログ構造は従う必要があります。

于 2012-09-16T17:49:07.877 に答える