0

我有一个 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

所以我不确定我错过了什么。类似的问题似乎没有直接的答案,这解决了我的问题。

4

2 回答 2

1

问题自行解决并消失。我曾尝试过 Project > Clean 并清理 unittest 项目,但没有明显效果。然后通过在项目'log4j2-test.xml'的同一文件夹中创建第二个xml文件来尝试一种解决方法,只要我添加了这个一切正常。现在,如果我删除 log4j2-test.xml,它似乎可以从 log4j2.xml 中读取,但我没有更改任何其他内容。所以有点奇怪,但不再是问题。

于 2016-01-06T18:52:47.590 回答
0

Maven:确保您的 pom.xml 包含资源目录中的所有 xml 文件,如下所示:

<resources>
    <resource>
    <directory>src/main/resources</directory>
        <includes>
            <include>**/*.xml</include>
             ... any other includes ....
        </includes>
    </resource>
</resources>`

然后清理(mvn clean)和构建(mvn package)Eclipse会遵守!

于 2020-05-11T12:48:18.680 回答