log4j.properties文件中log4j.rootLogger属性的意义是什么?如果我不使用这家酒店会怎样?

时间:2014-05-26 11:36:50

标签: java logging log4j apache-commons-logging

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模式,会发生什么。

3 个答案:

答案 0 :(得分:74)

Samudra Gupta在他的书 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

Samudra Gupta继续解释:

  

在层次结构的顶部存在一个根记录器。根记录器存在于我们可能提出的任何自定义记录器层次结构范围之外。它始终作为所有可能的记录器层次结构的根记录器存在,并且没有命名空间。所有其他特定于应用程序的Logger对象都是根记录器的子对象。记录器的父子关系表示在同一应用程序中执行的记录器的依赖关系。子记录器可以在树上递归地从其父记录器继承属性。通常,子记录器将从其父记录器继承以下属性:

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

备注

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

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

答案 1 :(得分:5)

回答

  

如果我不使用此属性会怎样?

如果你没有将rootLogger设置为某个级别和一个appender,你会收到警告。

例如,如果省略或注释掉行log4j.rootLogger=DEBUG, stdout,即说你的log4j.properties文件只包含rootlogger而没有其他记录器,那么这里的根记录器被注释掉了:

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

答案 2 :(得分:4)

log4j.rootLogger 属性为根Logger设置Level(DEBUG here)和Appender(此处为A1)。这不是强制性的。根记录器没有附加默认的appender,它可以在没有appender的情况下存在。因此,您的log4j属性文件可以不设置此属性。

Root logger是log4j层次结构中最高的记录器,类似于Java中的Object类。