运行所有 Maven 测试时无法控制 log4j

sky*_*ert 5 java maven-3

我已将src/test/resources/log4j.propertieslog4j 配置为不记录任何内容。

当我运行单个测试时,即mvn clean test -Dtest=MyTestClass,会注意到此 log4j 属性。但是,当我运行所有测试时,即mvn clean test,此日志记录配置被忽略。怎么会这样?!!

我想我快疯了,但希望有一个合乎逻辑的解释:-)

非常感谢任何帮助。

$  mvn -version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk-8-oracle-x64/jre
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "4.6.0-1-amd64", arch: "amd64", family: "unix"
Run Code Online (Sandbox Code Playgroud)

万无一失的版本是2.19.1:

[INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ common-util ---
Run Code Online (Sandbox Code Playgroud)

src/test/resources/log4j.properties

log4j.rootLogger=OFF
Run Code Online (Sandbox Code Playgroud)

与资源相关的POM片段:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.5</version>
      <configuration>
        <encoding>ISO-8859-1</encoding>
      </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

sky*_*ert 2

下面的 52 个测试类之一的方法src/test/java中有以下几行@Before

   import org.apache.log4j.BasicConfigurator;

   @Before
   public void setUp() {
     BasicConfigurator.resetConfiguration();
     BasicConfigurator.configure();
   }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,据我所知,这些对 log4j 的调用也会影响所有其他 junit 类,这一定是一个错误。删除这些行可以mvn test得到与 running 相同的日志记录行为mvn test -Dtest=MyTestClass,即src/test/resources/log4j.properties.