Log4j 2日志无法输出至控制台问题求助
配置文件位置或命名错误
Log4j 2默认从classpath根目录加载配置文件,文件名必须严格为log4j2.properties。如果文件放在src/main/resources以外的目录,或者文件名写错(比如log4j.properties、log4j2.prop),框架会找不到配置,默认启用最低日志级别(通常为ERROR),info级别的日志自然不会输出。配置文件未启用控制台输出
检查配置文件是否正确定义了ConsoleAppender,并且关联到RootLogger,同时日志级别设置正确。示例正确配置片段:# 定义控制台输出Appender appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 根日志关联控制台Appender,设置级别为INFO rootLogger.level = INFO rootLogger.appenderRef.stdout.ref = STDOUT若未配置ConsoleAppender,或RootLogger级别设为WARN/ERROR,info日志不会输出到控制台。
依赖冲突导致Log4j 2未加载
Selenide依赖SLF4J,若项目中引入了其他日志实现(如logback、commons-logging),或存在slf4j-log4j12这类绑定旧版log4j的依赖,会覆盖Log4j 2的实现。可执行mvn dependency:tree查看依赖树,排查并排除冲突依赖。Logger初始化错误
确认BaseTest中Logger的初始化代码使用Log4j 2的正确API:import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class BaseTest { private static final Logger log = LogManager.getLogger(BaseTest.class); }若误用SLF4J的Logger且未正确绑定Log4j 2,或使用旧版log4j的Logger类,日志不会通过Log4j 2输出。
Maven未将配置文件打包到classpath
检查pom.xml是否正确配置资源目录。默认src/main/resources下的文件会被打包,但如果自定义了资源配置,需确保包含properties文件:<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </build>否则配置文件不会被复制到
target/classes目录,运行时无法加载。特定包日志级别过高
检查配置文件是否给BaseTest所在包设置了更高的日志级别,比如:logger.test.name = com.yourpackage.tests logger.test.level = WARN这种情况下该包下的info日志会被过滤,需调整对应包的日志级别。
内容的提问来源于stack exchange,提问作者abrakadabra

