Java log4j.properties文件中log4j.rootLogger属性的意义是什么?如果我不';你不能用这个财产吗?

Java log4j.properties文件中log4j.rootLogger属性的意义是什么?如果我不';你不能用这个财产吗?,java,logging,log4j,apache-commons-logging,Java,Logging,Log4j,Apache Commons Logging,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 如果我将此属性

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

Samudra Gupta在他的书1中解释道:

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

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

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

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

注释

1 Samudra Gupta,Pro Apache Log4j,第二版(加州伯克利:Apress,2005),24-25,ISBN13:978-1-59059-499-5


2 Dominic Mitchell,登录Java,于2014年5月26日检索。

log4j。rootLogger属性设置根记录器的级别(此处为调试)和附录(此处为A1)。这不是强制性的。根记录器没有附加默认的appender,它可以在没有appender的情况下存在。因此,您的log4j属性文件可以在不设置此属性的情况下运行

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

回答

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

如果没有将rootLogger设置为level和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.

+对于“对于所有可能的记录器层次结构,它始终作为根记录器存在,并且没有名称空间。”OP问题的答案是什么-“如果我不使用此属性会发生什么?”?天哪…请查看Dominic页面链接上的背景。绝对不可读。@testerjoe2-你说得对,虽然这是一张漂亮的图像,但确实让人难以阅读-就像过去的html时代,人们会用黄色背景和白色文本-让你的眼睛想流血!