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
模式,会发生什么。
答案 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
Samudra Gupta继续解释:
在层次结构的顶部存在一个根记录器。根记录器存在于我们可能提出的任何自定义记录器层次结构范围之外。它始终作为所有可能的记录器层次结构的根记录器存在,并且没有命名空间。所有其他特定于应用程序的
Logger
对象都是根记录器的子对象。记录器的父子关系表示在同一应用程序中执行的记录器的依赖关系。子记录器可以在树上递归地从其父记录器继承属性。通常,子记录器将从其父记录器继承以下属性:
Level
:如果子记录器没有指定明确的树级别,它将使用其最接近的父级别或它在层次结构中递归找到的第一个适当级别。Appender
:如果没有附加到记录器的appender,则子记录器使用其最近的父记录器的appender或它在树上递归发现的第一个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 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类。