log4j警告问题 - Apache Commons

6

我正在使用apache commons库和log4j。 我有一个xml配置文件和一个log4j.properties文件。 我想在我的xml配置文件中指定我的log4j属性路径。 为了加载我的设置,我执行以下操作:

//Loading my xml file
this.config = new XMLConfiguration(this.xmlFileName);  

此时会出现以下警告:

log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.ConfigurationUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

然而,我尚未调用任何log4j对象。一旦我读取了xml文件,就可以成功地使用我的log4j实例。 是否有任何方法可以消除这些警告?

4个回答

4

我不想将我的log4j.properties插入类路径中,因为它位于jar包外部和另一个目录中。我想在运行时使用应用程序配置文件中指定的路径来加载它。 - Matteo Codogno

1

当创建一个日志记录器但没有定义任何附加器时,Log4J会输出此错误。实际上,当在初始化log4j之前创建一个日志记录器时,就会出现这个错误。

你说你没有调用任何log4j对象。但是在错误消息中,你可以看到org.apache.commons.configuration.ConfigurationUtils创建了一个日志记录器对象(参见第66行)。

你可以在初始化之前关闭它,参见如何关闭log4j警告?

Logger.getRootLogger().setLevel(Level.OFF);

既然初始化通常设置了根记录器的日志级别,因此不需要再次打开它。


好的,有没有办法在 'org.apache.commons.configuration.ConfigurationUtils' 内部禁用 LOG,或者在我的 xml 配置中配置我的 log4j 属性呢? - Matteo Codogno

0

在加载的log4j配置文件中,您至少应设置根记录器的appender和日志记录器级别。否则,您将看到此警告消息。

设置根记录器的appender和日志记录器级别的示例:

#Set root logger 's level and its appender to an appender called CONSOLE which is defined below.
log4j.rootLogger=DEBUG, CONSOLE

#Set the behavior of the CONSOLE appender 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

0

我用以下方法解决了我的问题:

//Disable log level
Logger.getRootLogger().setLevel(Level.OFF);

现在我可以读取我的XML配置文件而不会出现警告。
设置日志级别后:

Logger.getRootLogger().setLevel(Level.INFO);

这不是我在我的帖子下评论中提出的解决方案吗? - ChrLipp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接