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

Jit*_*dra 77 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
Run Code Online (Sandbox Code Playgroud)

如果我将此属性设置为ERROR模式会发生什么.

Pau*_*gas 84

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
Run Code Online (Sandbox Code Playgroud)

这就是记录器层次结构最终可能的结果: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日.

  • 天哪......看看Dominic页面链接的背景.绝对不可读. (4认同)
  • +1 表示“它始终作为所有可能的记录器层次结构的根记录器存在,并且没有命名空间。” (2认同)
  • 这个 OP 问题的答案是什么 - “*如果我不使用这个属性会怎样?*”? (2认同)

小智 7

回答

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

如果未将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
Run Code Online (Sandbox Code Playgroud)

您将获得类似以下输出的内容:

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.
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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