问题 commons-logging和log4j属性文件


我试图通过commons-logging使用log4j,如果log4j属性文件没有被称为log4.properties则会遇到问题。 我收到以下错误: log4j:WARN没有找到记录器(LogMePlease)的appender。 log4j:WARN请正确初始化log4j系统。

我的代码非常简单:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LogMePlease 
{
static Log l = LogFactory.getLog(LogMePlease.class);

public static void main(String [] args)
{
    l.warn("Hello World!");
}
}

在我的班级路径中,我有: commons-logging.properties 包含以下条目的文件

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.configuration=log4j-test.properties

log4j-test.properties 文件

当我运行这个代码时,我得到了

log4j:WARN No appenders could be found for logger (LogMePlease).
log4j:WARN Please initialize the log4j system properly.

如果我将log4j-test.properties文件重命名为log4j.properties - 那么一切正常。 因此,问题是我如何设置公共日志记录以使用log4j.properties文件的任意名称。


7967
2017-10-06 07:39


起源



答案:


文件 commons-logging.properties 仅在log4j查找时从公共日志记录中读取 log4j.configuration 在系统属性中。

所以你必须用它们指定它们 -Dlog4j.configuration=log4j-test.properties 在命令行上作为JVM选项或您必须调用 System.setProperty() 在第一次调用任何日志记录方法之前(通常很难实现)。

注意:如果可以,请使用XML配置 log4j.xml;它对配置log4j更加简单和强大。


10
2017-10-06 07:48





您需要将协议添加到System属性值的前面,如下所示:-Dlog4j.configuration = file://log4j-test.properties

如果没有协议,它将在类路径中查找。


1
2017-10-10 18:20





jul - commons-logging,它喜欢你的情况。

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

在Log的实例之前设置log4j.properties。

System.setProperty("log4j.configuration", "log4j.properties");

0
2017-07-31 09:08