如何配置Maven屏蔽单元测试中依赖的Log4j日志输出?
解决Maven测试时Log4j日志干扰的问题
下面两种方法可以帮你屏蔽依赖的Log4j INFO/DEBUG日志,任选其一即可:
方法一:通过Maven Surefire插件直接设置日志级别
单元测试默认由Surefire插件执行,直接在pom.xml里给插件加系统属性就能快速调整日志级别:
在pom.xml的<build>-><plugins>里添加:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <!-- 用你项目里已有的版本,或者最新稳定版 --> <configuration> <systemPropertyVariables> <!-- 全局把根日志级别设为WARN,直接屏蔽INFO和DEBUG --> <log4j.rootLogger>WARN, console</log4j.rootLogger> <!-- 要是只想屏蔽某个特定依赖的日志,比如com.example.xxx这个包,就加下面这行 --> <log4j.logger.com.example.xxx>WARN</log4j.logger.com.example.xxx> </systemPropertyVariables> </configuration> </plugin>
配置后,mvn test运行时,Surefire会把这些参数传给JVM,Log4j会自动读取并调整日志输出。
方法二:用自定义Log4j配置文件做精细控制
如果需要更灵活的日志规则(比如不同包用不同级别、自定义输出格式),可以自己加配置文件:
- 在项目的
src/test/resources目录下创建log4j.properties(Log4j2的话用log4j2.xml),示例内容:
# 根日志级别设为WARN,全局屏蔽INFO/DEBUG log4j.rootLogger=WARN, CONSOLE # 控制台输出的格式配置 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 单独给某个依赖包设WARN级别,比如org.springframework log4j.logger.org.springframework=WARN
要是用Log4j2,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> <Root level="WARN"> <AppenderRef ref="Console"/> </Root> <!-- 屏蔽指定依赖的日志 --> <Logger name="com.example.xxx" level="WARN" additivity="false"> <AppenderRef ref="Console"/> </Logger> </Loggers> </Configuration>
- 让Maven加载这个配置文件,在Surefire插件里加配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <systemPropertyVariables> <!-- 指定Log4j配置文件路径 --> <log4j.configuration>file:src/test/resources/log4j.properties</log4j.configuration> <!-- Log4j2的话换成下面这行 --> <!-- <log4j.configurationFile>file:src/test/resources/log4j2.xml</log4j.configurationFile> --> </systemPropertyVariables> </configuration> </plugin>
额外注意
你用VS Code的Metals扩展运行测试的话,偶尔Metals会用自己的启动参数,你可以在VS Code设置里搜metals.test,检查有没有额外的日志相关配置,确保和Maven的配置一致,避免冲突。
内容的提问来源于stack exchange,提问作者Ivan Webber
相关产品推荐
相关产品推荐

