找不到log4j2.xml,但它位于Eclipse项目的类路径中

时间:2016-01-06 17:49:51

标签: eclipse classpath log4j2 eclipse-classpath

我有一个Eclipse Java项目,我们称之为'unittest',我正在尝试log4j2 + SLF4J它似乎正在记录正常,但忽略了我的log4j2.xml。我明确地看到: 错误StatusLogger找不到log4j2配置文件。使用默认配置:仅将错误记录到控制台。

项目文件结构是'test'是项目的源文件夹的地方

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

然后清理(MVN清理)并生成(MVN软件包) Eclipse将在此之后遵守!