在IntelliJ中为JUnit单元测试自定义Log4j日志配置遇阻
问题:JUnit单元测试中Log4j Info日志无法输出
在IntelliJ的默认Maven项目中,尝试配置src/test/java下JUnit的Log4j日志,将配置文件放在src/test/resources(IntelliJ自动识别为Maven资源目录),也试过放在test和src根目录,但均无效。
单元测试代码
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Test; public class LogTest { private static Logger log = LogManager.getLogger(LogTest.class); @Test public void printLogs() { log.info("Hello world from log.info!"); log.error("Hello world from log.error!"); } }
配置文件(src/test/resources/log4j.properties)
log4j.rootLogger=ALL
实际输出
00:48:19.766 [main] ERROR LogTest - Hello world from log.error!
Process finished with exit code 0
问题原因及解决办法
核心问题
你使用的是Log4j 2.x的API(导入的是org.apache.logging.log4j包),但配置文件用了Log4j 1.x的语法(log4j.rootLogger),两者完全不兼容。同时Log4j 2.x默认不识别log4j.properties作为配置文件,需要命名为log4j2.properties。
解决步骤
- 重命名配置文件:将
src/test/resources下的log4j.properties改名为log4j2.properties。 - 使用Log4j 2.x语法配置:替换为以下基础配置(可根据需求调整):
status = error name = TestLogConfig # 控制台输出配置 appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n # 根日志级别及输出目标 rootLogger.level = all rootLogger.appenderRefs = stdout rootLogger.appenderRef.stdout.ref = STDOUT - 确认依赖版本一致:确保
pom.xml中log4j-api和log4j-core版本匹配,示例依赖:<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> </dependencies> - 重新运行测试:此时
info级别的日志会正常输出。
内容的提问来源于stack exchange,提问作者tresf
相关产品推荐
相关产品推荐

