web-dev-qa-db-ja.com

log4j.propertiesファイルのlog4j.rootLoggerプロパティの重要性は何ですか?このプロパティを使用しないとどうなりますか?

log4j.rootLoggerファイルのlog4j.propertiesプロパティの意味は何ですか?このプロパティを使用しないとどうなりますか?

# 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

このプロパティをERRORモードに設定するとどうなりますか。

75
Jitendra

サムドラ・グプタは本の中で説明しています1

Loggerオブジェクトは、アプリケーション開発者がメッセージを記録するために使用するメインオブジェクトです。アプリケーションの特定のインスタンス内で動作するLoggerオブジェクトは、親子階層に従います。

次の構成がある場合:

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO

これは、ロガー階層が最終的にどのように見えるかということです。2

Tree

サムドラ・グプタは引き続き説明します:

階層の最上部にはルートロガーが存在します。ルートロガーは、私たちが思いつくかもしれないカスタムロガー階層の範囲外に存在します。すべての可能なロガー階層のルートロガーとして常に存在し、名前空間はありません。他のすべてのアプリケーション固有のLoggerオブジェクトは、ルートロガーの子オブジェクトです。ロガーの親子関係は、同じアプリケーション内で動作するロガーの依存関係を示します。子ロガーは、親ロガーから再帰的にツリーの上位にあるプロパティを継承できます。通常、子ロガーは親ロガーから次のプロパティを継承します。

  • Level:子ロガーに明示的なツリーレベルが指定されていない場合、子ロガーは最も近い親のレベル、または階層を再帰的に見つけた最初の適切なレベルを使用します。
  • Appender:ロガーにアペンダーがアタッチされていない場合、子ロガーは最も近い親ロガーのアペンダーまたは再帰的にツリーの上方にある最初のアペンダーを使用します。
  • ResourceBundleResourceBundlesは、ロギングメッセージのローカライズに使用されるキーと値のパターンプロパティファイルです。子ロガーは、親ロガーに関連付けられているResourceBundleを継承します。

メモ

1 Samudra Gupta、Pro Apache Log4j、Second Edition(Berkeley、CA:Apress、2005)、24-25、ISBN13:978-1-59059-499-5

2 ドミニクミッチェル、Javaでのロギングhttp://happygiraffe.net/blog/2008/09/03/logging-in-Java/ 、取得2014年5月26日。

79
Paul Vargas

答える

このプロパティを使用しないとどうなりますか?

RootLoggerをレベルとアペンダーに設定しないと、警告が表示されます。

たとえば、行log4j.rootLogger=DEBUG, stdoutを省略またはコメントアウトした場合、つまり、log4j.propertiesファイルにルートロガーのみが含まれ、追加のロガーは含まれていない場合、ルートロガーはコメントアウトされます:

#log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.SimpleLayout

次のような出力が得られます:

log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
7
user2066936

log4j.rootLoggerプロパティは、ルートロガーのレベル(ここではDEBUG)およびアペンダー(ここではA1)を設定します。これは必須ではありません。ルートロガーにはデフォルトのアペンダーがアタッチされておらず、アペンダーがなくても存在できます。そのため、log4jプロパティファイルは、このプロパティが設定されていなくてもかまいません。

ルートロガーは、JavaのObjectクラスに似たlog4j階層の最高のロガーです。

5
abhishek jotshi