我有一个 Eclipse Java 项目,我们称它为“unittest”,我正在尝试 log4j2 + SLF4J,它似乎记录正常,但忽略了我的 log4j2.xml。我明确地看到:ERROR StatusLogger No log4j2 configuration file found。使用默认配置:仅将错误记录到控制台。
项目文件结构是“测试”是项目的源文件夹
unittest/
test/
log4j2.xml
com/blah/blah/etc...
我将 log4j2.xml 放在 test/ 文件夹的根目录中。为项目定义的输出文件夹是 unittets/bin 目录。并且我验证了在构建我的项目时在 bin 目录中创建了 log4j2.xml。我现在不使用 Maven,只使用 Eclipse。
这是我的测试代码:
public class LogManagerConfigTest {
private static final org.slf4j.Logger slf4jLogger = LoggerFactory.getLogger(LogManagerConfigTest.class);
@Test
public void loggerTest() {
//for troubleshooting No log4j2 configuration file found error only
System.out.println("Looking for configuration on classpath:");
URL resource = ClassLoader.getSystemResource("log4j2.xml");
System.out.println("found"+String.valueOf(resource));
slf4jLogger.trace("Trace message Test {}",1);
slf4jLogger.trace("Trace message Test {}",2);
slf4jLogger.debug("Debug message Test {}",1);
slf4jLogger.debug("Debug message Test {}",2);
slf4jLogger.info("Info message Test {}",1);
slf4jLogger.info("Info message Test {}",2);
slf4jLogger.error("Error message Test {}",1);
slf4jLogger.error("Error message Test {}",2);
}
}
我现在从 log4j 文档中获取的 log4j2.xml 的内容,我计划稍后更改...
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="sandbox" level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
使用与我的 Eclipse 项目相同的类路径在 Eclipse 中将其作为 JUnit 测试运行,以下是输出:
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Looking for configuration on classpath:
found file:/C:/work/workspace/unittests/bin/log4j2.xml
12:39:43.969 [main] ERROR sandbox.LogManagerConfigTest - Error message Test 1
12:39:43.971 [main] ERROR sandbox.LogManagerConfigTest - Error message Test 2
所以我不确定我错过了什么。类似的问题似乎没有直接的答案,这解决了我的问题。