log4j.properties文件中的log4j.rootLogger属性有什么意义?如果我不使用此属性会怎样?


86

文件中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

如果将此属性设置为ERRORmode,会发生什么。

Answers:


94

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:如果没有附加器附加到记录器,则子记录器将使用其最接近的父记录器的附加器或在树中递归找到的第一个附加器。
  • ResourceBundleResourceBundles是用于记录消息本地化的键值模式属性文件。子记录器会继承ResourceBundle与其父记录器关联的任何内容。

笔记

1 Samudra Gupta,Pro Apache Log4j,第二版(伯克利,加利福尼亚: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
+1表示“它始终作为所有可能的记录程序层次结构的根记录程序存在,并且没有名称空间。”
Azim

2
这个OP问题的答案是什么-“如果我不使用此属性会发生什么? ”?
hagrawal

4
天哪...请查看Dominic页面链接上的背景。绝对不可读。
MasterJoe

@ testerjoe2-您是对的,尽管它的图片很漂亮,但确实难以阅读-就像旧的html时代一样,人们会看到带有白色文字的黄色背景-让您的眼睛流血!
JGlass

10

回答

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

如果未将rootLogger设置为级别和附加程序,则会收到警告。

例如,如果您省略或注释掉该行log4j.rootLogger=DEBUG, stdout,即说您的log4j.properties文件仅包含rootlogger,而没有其他记录器,则此处的root记录器已被注释掉:

#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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.