如何为SpringJUnit4ClassRunner配置log4j.properties?

时间:2010-12-31 12:24:26

标签: java spring log4j junit4

突然间,这在JUnit测试期间不断发生。一切正常,我写了一些新的测试,发生了这个错误。如果我还原它,它就不会消失。那是为什么?

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

7 个答案:

答案 0 :(得分:71)

您编写的新测试(直接或间接)使用使用Log4j 记录的类。

需要配置Log4J才能使此日志记录正常工作。

log4j.properties (或log4j.xml)文件放在测试类路径的根目录中。

应该有一些基本配置,例如

# 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

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# An alternative logging format:
# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n

默认情况下,appender会输出到控制台,但您也可以像这样显式设置目标:

log4j.appender.A1.Target=System.out

这会将所有输出以漂亮的格式重定向到控制台。更多信息可以在Log4J manual

中找到

Log4J Logging将正确配置,此警告将消失。

答案 1 :(得分:48)

如果您不想打扰文件,可以在代码中执行以下操作:

static
{
    Logger rootLogger = Logger.getRootLogger();
    rootLogger.setLevel(Level.INFO);
    rootLogger.addAppender(new ConsoleAppender(
               new PatternLayout("%-6r [%p] %c - %m%n")));
}

答案 2 :(得分:8)

在类路径的根目录中添加至少一个appender的log4j.properties(log4j.xml)文件。

文件(log4j.properties)的内容可以像

一样简单
log4j.rootLogger=WARN,A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n

这将启用log4j日志记录,默认日志级别为WARN,并使用java控制台记录消息。

答案 3 :(得分:4)

我正确配置了log4j.properties。那不是问题。过了一会儿,我发现问题出在Eclipse IDE中,它在“缓存”中有一个旧版本,并没有创建一个新版本(Maven依赖问题)。我必须手动构建项目,现在它可以工作。

答案 4 :(得分:3)

我在eclipse中使用了Maven,我不想在根文件夹中有一个属性文件的附加副本。您可以在eclipse中执行以下操作:

  1. 打开运行对话框(单击播放按钮旁边的小箭头,然后转到运行配置)
  2. 转到“classpath”标签
  3. 选择“用户条目”,然后单击右侧的“高级”按钮。
  4. 现在选择“添加外部文件夹”单选按钮。
  5. 选择资源文件夹

答案 5 :(得分:2)

我知道这已经过时了,但我也遇到了麻烦。对于使用Maven和Eclipse的Spring 3,我需要将log4j.xml放在src / test / resources中以便Unit测试正确记录。放在测试的根部对我来说不起作用。希望这有助于其他人。

答案 6 :(得分:2)

因为我不想拥有重复的文件(test和main中的log4j.properties),而且我有很多测试类,它们都运行SpringJUnit4ClassRunner类,所以我必须自定义它。这就是我使用的:

this.login = function (email, password) {
    return $http.get(FOO_URL, {
        params: {
            email: email,
            password: password
        }
    });
}

使用它时,将SpringJUnit4ClassRunner替换为MySpringJUnit4ClassRunner

import java.io.FileNotFoundException;

import org.junit.runners.model.InitializationError;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Log4jConfigurer;

public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {

    static {
        String log4jLocation = "classpath:log4j-oops.properties";
        try {
            Log4jConfigurer.initLogging(log4jLocation);
        } catch (FileNotFoundException ex) {
            System.err.println("Cannot Initialize log4j at location: " + log4jLocation);
        }
    }

    public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }
}
相关问题