如何为SpringJUnit4ClassRunner配置log4j.properties?

use*_*882 66 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.
Run Code Online (Sandbox Code Playgroud)

Axe*_*ine 72

您编写的新测试(直接或间接)使用使用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
Run Code Online (Sandbox Code Playgroud)

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

log4j.appender.A1.Target=System.out
Run Code Online (Sandbox Code Playgroud)

这会将所有输出以漂亮的格式重定向到控制台.更多信息可以在Log4J手册中找到,

然后将正确配置Log4J Logging,此警告将消失.


tst*_*ter 48

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

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


Aru*_*hny 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
Run Code Online (Sandbox Code Playgroud)

这将启用具有默认日志级别的log4j日志记录,WARN并使用java控制台记录消息.