使用Maven和GMaven在groovy单元测试中记录Logback还是slf4j?

使用Maven和GMaven在groovy单元测试中记录Logback还是slf4j?,maven,groovy,slf4j,logback,cucumber-jvm,Maven,Groovy,Slf4j,Logback,Cucumber Jvm,我正在尝试在我的Grovvy单元测试中启用日志记录,我使用的是Cucumber jvm 在我的测试中,我导入了: import groovy.util.logging.Slf4j 然后补充说 @Slf4j 但是,当我运行以下任何命令时: mvn test -Dgmaven.logging=DEBUG mvn test -Dgmaven.logging=TRACE 此方法仅打印出“[WARN]log.isWarnEnabled()” 这是我的./src/test/resources/logb

我正在尝试在我的Grovvy单元测试中启用日志记录,我使用的是Cucumber jvm

在我的测试中,我导入了:

import groovy.util.logging.Slf4j
然后补充说

@Slf4j
但是,当我运行以下任何命令时:

mvn test -Dgmaven.logging=DEBUG
mvn test -Dgmaven.logging=TRACE
此方法仅打印出“[WARN]log.isWarnEnabled()”

这是我的./src/test/resources/logback.xml:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <!-- Use level="DEBUG" for more detailed logging -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

%d{HH:mm:ss.SSS}[%thread]-5级别%logger{36}-%msg%n

如何在单元测试中更改日志级别?

我发现GMaven不使用logback的困难之处。该插件旨在利用Sonatype提供的默认SLF4J,名为(在GMaven advanced中描述)

因此,这可能解释了为什么您的logback.xml文件被忽略(尽管有人认为SLF4J调用在从单元测试运行时会重定向到配置的运行时提供程序)

要将gmaven.logging属性传递到您的单元测试中,您可以尝试在surefire插件中设置它,如下所示:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
      <systemPropertyVariables>
        <gmaven.logging>DEBUG</gmaven.logging>
      </systemPropertyVariables>
    </configuration>
  </plugin>
  <plugin>
    ..
    ..
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </plugin>

org.apache.maven.plugins
maven surefire插件
2.12.4
调试
希望这有帮助

更新 我在开发Maven插件时遇到了这个问题。我的挑战是捕获源自不使用SLF4J的库的日志调用

为了解决这个问题,我在我的插件依赖项部分添加了一个桥接API,如下所示:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
      <systemPropertyVariables>
        <gmaven.logging>DEBUG</gmaven.logging>
      </systemPropertyVariables>
    </configuration>
  </plugin>
  <plugin>
    ..
    ..
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </plugin>

..
..
org.slf4j
jcl-over-slf4j
1.5.10

这将把commons日志调用重新路由到您的SLF4J实现,在Maven的情况下,这将是流言蜚语。

我已经将'-Dgmaven.logging=DEBUG'放在命令行中了。但我确实在surefire中添加了这个,以防万一,这并没有改变任何事情。仍然只打印[警告]日志。其他人都被忽略了。@MickKnutson多痛苦啊。。。。运行时类路径是什么样子的?这些日志调用是否有可能被另一个日志提供商(如log4j)截获?(通常包含为可传递依赖项)是否有人具有可用于gossip的working.gossip/config.properties?我无法配置它。@MickKnutson在我的例子中,我只是使用默认设置。设置gmaven.logging属性允许我设置日志级别。在我的例子中,我正在开发一个插件(而不是试图运行单元测试)。我已经包括了我所做的事情的细节。希望这有帮助。