log4j.properties文件中的log4j.rootLogger属性有什么意义。 如果我不使用这个属性会发生什么?

log4j.properties文件中log4j.rootLogger属性的意义是什么? 如果我不使用这个属性会发生什么?

例如

 # 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对象是应用程序开发人员用来logging任何消息的主要对象。 在应用程序的特定实例中执行的Logger对象遵循父子层次结构

如果您有以下configuration:

 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 

这是logging器层次结构最终可能的结果: 2

树

萨穆德拉·古普塔继续解释说:

在层次结构的顶部存在一个根logging器。 根logging器存在于我们可能想到的任何自定义logging器层次结构的范围之外。 它始终作为所有可能的logging器层次结构的根logging器存在,并且没有名称空间。 所有其他特定于应用程序的Logger对象都是根logging器的子对象。 logging器的父子关系表示logging器在同一应用程序内的依赖关系。 一个子logging器可以从它的父logging器recursion地inheritance树的​​属性。 通常,子logging器将从其父logging器inheritance以下属性:

  • Level :如果子logging器没有指定明确的树级别,它将使用其最接近父级的级别或者它在recursion层次上查找的第一个适当级别。
  • Appender :如果没有appender附加到logging器,则子logging器使用其最近的父logging器的appender或它在树上recursion查找的第一个appender。
  • ResourceBundleResourceBundles是用于日志消息本地化的键值模式属性文件。 子logging器inheritance与其父logging器关联的任何ResourceBundle

笔记

1 Samudra Gupta, Pro Apache Log4j,第二版 (Berkeley,CA:Apress,2005),24-25,ISBN13:978-1-59059-499-5

2 Dominic Mitchell, loginJavahttp://happygiraffe.net/blog/2008/09/03/logging-in-java/ ,检索2014年5月26日。

log4j.rootLogger属性为Root Logger设置Level(DEBUG)和Appender(A1在这里)。 这不是强制性的。 根logging器没有附加的默认appender,它可以存在没有appender。 所以,你的log4j属性文件可以没有设置这个属性。

根logging器是类似于Java中的对象类的log4j层次结构中的最高logging器。

回答

如果我不使用这个属性会发生什么?

如果您没有将rootLogger设置为关卡和appender,则会收到警告。

例如,如果您省略或注释掉log4j.rootLogger=DEBUG, stdout这两行,也就是说您的log4j.properties文件仅包含rootlogger并且不包含其他logging器,这里将根logging器注释掉:

 #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.