当前位置: 首页 > 知识库问答 >
问题:

加载日志4j。使用maven测试的xml

於英朗
2023-03-14

我正在尝试用我的java代码加载“log4j.xml”来运行“mvn测试”。我正在获取文件未找到异常。希望能得到一些帮助。

我的java代码:

public class MyClass {
    static Logger logger = Logger.getLogger(MyClass.class);
    public boolean check(){
        try{
            DOMConfigurator.configure("log4j.xml");
            logger.info("into the method");
        }
        return true;
    }
}

Junit测试用例:

import static org.junit.Assert.*;

import org.junit.Test;

public class MyClassTests {

    @Test
    public void testCheck() {
        MyClass myc = new MyClass();
        assertEquals(true, myc.check()); 
    }
}

pom.xml块

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.15</version>
        <configuration>
            <includes>
                <include>**/*Tests.java</include>
                <include>log4j.xml</include>
            </includes>
            <argLine>-Xmx512m</argLine>
        </configuration>
        <inherited>true</inherited>
    </plugin>

文件结构:

  • pom.xml=*/myproject/pom.xml
  • log4j.xml=*/myproject/src/main/Resources/log4j.xml
  • myclass.java=*/myproject/src/main/java/MyClass.java
  • junit test=*/myproject/src/test/java/MyClassTests.java

当我运行命令"mvn test",我得到一个文件未找到异常log4j.xml:

Java . io . file not found exception:*/my project/log4j . XML(没有这样的文件或目录)

基本上,代码在项目的根文件夹中查找log4j.xml,而不是在/src/main/resources文件夹中。我不想将代码更改为“DOM configurator . configure("/src/main/resources/log4j . XML ");”这将导致部署的应用程序出现问题。需要更优雅的解决方案

共有1个答案

宰父远
2023-03-14

我看不到POM,但在构建声明中应该有一个资源部分,以确保src/main/resources作为类资源可用。

    <build>
    <outputDirectory>build/maven/${artifactId}/target/classes</outputDirectory>

<resources>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
</build>

那么DOMConfigurator应该能够定位log4j.xml作为类资源。如果在您的项目上运行maven包,您应该查看build或target文件夹,并看到log4j.xml被复制到classes文件夹中。然后你就会知道它应该可以作为一种资源。

 类似资料:
  • 问题内容: 在IDE中进行开发时,跟踪和调试日志可能会有所帮助,但是在构建期间,我发现这些行非常令人不安,并且混淆了maven或其他构建工具打印的报告。 让log4j尊重系统属性(如1)以与maven一起使用或不需要对项目文件进行更改的东西会很好。我知道我可以指定 2,但我想在这里询问是否有人在构建过程中找到了一种更智能的方法来禁用日志记录,而手动干预最少。即,一些将maven检测为调用方的jav

  • 我有一个项目,其中log4j到slf4j-2.17.1.jar作为依赖项的一部分自动下载。我还添加了排除标记。但仍然在下载它。 需要注意的是,我在pom.xml.的属性标签中指定了log4j2版本,它正在下载log4j-api-2.17.1.jar(这是预期的)log4j-to-slf4j-2.17.1.jar(这不是必需的)。 有没有解决这个问题的办法?请注意,我已经检查过,jar在类路径中也不

  • 有没有更简单的方法来完成我想要的?如果这是最好的方法,那么我做错了什么?

  • 除了统一的HTML或XML报告之外,我如何获得Spock测试执行控制台输出或类似于我的应用程序日志? 使用Gradle2.11和Log4j支持的Slf4j。

  • 我已经在我的 Build.scala 文件中定义了 3 个项目: null Common 项目包含 /test/资源,其中包含日志回溯测试.xml配置,我想将其用于服务和 Web 测试。 此设置在具有intelliJ中工作正常,但是当我尝试从命令行运行“sbt测试”时,日志回溯测试.xml不会复制到/服务/目标/测试类或/web/目标/测试类,这意味着测试将使用默认的slf4j配置和无用的大量DE

  • 我正在处理一个真正的噩梦 我收到一个通知单,请求停用weblogic中部署的服务的hibernate日志记录。没有任何东西可以带走这些讨厌的调试日志,它们正在淹没系统。 我尝试过的: > 添加到log4j.properties: log4j.logger.org.hibernate=INFO,文件 log4j.logger.org.hibernate.SQL=INFO log4j.logger.o