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
モードに設定するとどうなりますか。
サムドラ・グプタは本の中で説明しています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
サムドラ・グプタは引き続き説明します:
階層の最上部にはルートロガーが存在します。ルートロガーは、私たちが思いつくかもしれないカスタムロガー階層の範囲外に存在します。すべての可能なロガー階層のルートロガーとして常に存在し、名前空間はありません。他のすべてのアプリケーション固有の
Logger
オブジェクトは、ルートロガーの子オブジェクトです。ロガーの親子関係は、同じアプリケーション内で動作するロガーの依存関係を示します。子ロガーは、親ロガーから再帰的にツリーの上位にあるプロパティを継承できます。通常、子ロガーは親ロガーから次のプロパティを継承します。
Level
:子ロガーに明示的なツリーレベルが指定されていない場合、子ロガーは最も近い親のレベル、または階層を再帰的に見つけた最初の適切なレベルを使用します。Appender
:ロガーにアペンダーがアタッチされていない場合、子ロガーは最も近い親ロガーのアペンダーまたは再帰的にツリーの上方にある最初のアペンダーを使用します。ResourceBundle
:ResourceBundles
は、ロギングメッセージのローカライズに使用されるキーと値のパターンプロパティファイルです。子ロガーは、親ロガーに関連付けられている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日。
答える
このプロパティを使用しないとどうなりますか?
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.
log4j.rootLoggerプロパティは、ルートロガーのレベル(ここではDEBUG)およびアペンダー(ここではA1)を設定します。これは必須ではありません。ルートロガーにはデフォルトのアペンダーがアタッチされておらず、アペンダーがなくても存在できます。そのため、log4jプロパティファイルは、このプロパティが設定されていなくてもかまいません。
ルートロガーは、JavaのObjectクラスに似たlog4j階層の最高のロガーです。