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

Posted

技术标签:

【中文标题】log4j.properties 文件中 log4j.rootLogger 属性的意义是啥?如果我不使用此属性会怎样?【英文标题】:What is the significance of log4j.rootLogger property in log4j.properties file? What happens if I don't use this property?log4j.properties 文件中 log4j.rootLogger 属性的意义是什么?如果我不使用此属性会怎样? 【发布时间】:2014-07-15 04:09:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

回答

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

如果你没有将 rootLogger 设置为 level 和 appender,你会得到一个警告。

例如,如果您省略或注释掉 log4j.rootLogger=DEBUG, stdout 行,即假设您的 log4j.properties 文件仅包含根记录器而没有其他记录器,则根记录器被注释掉:

#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】:

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

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

【讨论】:

【参考方案3】:

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:如果子 logger 没有明确指定树级别,它将使用其最近的父级别或在层次结构中递归找到的第一个适当级别。 Appender:如果 logger 上没有附加 appender,则子 logger 使用其最近的父 logger 的 appender 或它在树上递归找到的第一个 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 表示“它始终作为所有可能的记录器层次结构的根记录器存在,并且它没有命名空间。” OP 的这个问题的答案是什么——“如果我不使用这个属性会怎样?” ?? 天哪...看看 Dominic 页面链接的背景。完全不可读。 @testerjoe2 - 你是对的,虽然它是一张漂亮的图片,但它确实让人难以阅读 - 就像过去的 html 时代,人们会有黄色背景和白色文本 - 让你的眼睛想要流血!

以上是关于log4j.properties 文件中 log4j.rootLogger 属性的意义是啥?如果我不使用此属性会怎样?的主要内容,如果未能解决你的问题,请参考以下文章

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

jsp中log4j.properties是啥文件?

如何在 web.xml 和 log4j.properties 中配置 log4j 输出文件路径?

根据log4j.properties文件中用户输入的值对文件位置进行参数化

根据 log4j.properties 文件中用户输入的值使文件位置参数化

log4j.properties中怎样配置才能在输出的日志信息中输出进程号和线程号?