4

私は Java プロジェクトを持っています (注:- Web プロジェクトではありません)。log4j を使用してメッセージを記録しています。

現在、私がそれを行うために行っている手順は次のとおりです。

  • プロジェクト レベルで log4j.properties ファイルを作成しました。

  • 宣言されたロガー logger = Logger.getLogger(MyClass.class);

  • 次に、-> PropertyConfigurator.configure("log4j.properties"); を使用してプロパティを構成しました。

  • 次に logger.debug("message"); を使用しました。私のメッセージを記録します。

しかし、このアプローチで私が感じた問題は、プロジェクトのすべてのクラス、つまり宣言から始まるすべてのステップで同じことをしなければならないことLogger loggerです。

ロガー変数をプロジェクト内の 1 か所で 1 回だけ構成し、ロガーの宣言された変数を使用してメッセージをログに記録する方法はありますか?

4

2 に答える 2

4

IMHO 通常のロギング目的で共通のロガーを持つべきではありません。各クラスは、によって独自のロガーを作成する必要がありますLogger logger = Logger.getLogger(MyClass.class);。クラスファイルが少ない場合、これはオーバーヘッドのように思えるかもしれませんが、これに従う方がよいでしょう。
このパターンのロガーに従うことで、構成レベル (log4j.properties 内) で任意のレベル (アプリケーション全体、任意のパッケージ、または任意のクラス) でロギングのレベルを柔軟に制御できます。

log4j.propertiesクラスパスを指定すると、log4j が自動的に取得します。
PropertyConfigurator.configure("log4j.properties");必須ではありません。

それでもやりたい場合は、ロガーへの実際の呼び出しをラップするログ用のメソッドを使用して、独自のロガー クラスMyLoggerを作成できます。static次に、個々のクラスから呼び出しMyLogger.log()たりMyLogger.debug()、ログに記録したりできます。

于 2013-01-07T06:03:46.043 に答える
0

以下の方法で設定できます

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
于 2013-01-07T05:49:12.047 に答える