使用Maven和GMaven在groovy单元测试中记录Logback还是slf4j?
我正在尝试在我的Grovvy单元测试中启用日志记录,我使用的是Cucumber jvm 在我的测试中,我导入了:使用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
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属性允许我设置日志级别。在我的例子中,我正在开发一个插件(而不是试图运行单元测试)。我已经包括了我所做的事情的细节。希望这有帮助。