更换Logger为SLF4J实现后控制台日志消失,寻求解决方案
日志切换到SLF4J后控制台日志消失问题
我将代码中的日志实现从Log4j原生API换成SLF4J门面后,未修改其他代码和原有Log4j配置,但控制台日志完全消失了,相关信息如下:
原Log4j日志实现代码
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; private static final Logger LOGGER = LogManager.getLogger(Logging.class); LOGGER.info(gson.toJson(startLog));
修改后的SLF4J日志代码
import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger LOGGER = LoggerFactory.getLogger(Logging.class); LOGGER.info(gson.toJson(startLog));
现有Log4j2配置文件(log4j2.xml)
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout> <pattern>%d{yyyy-MM-dd HH:mm:ss,SS} %-5p %-17c{2} %m%n</pattern> </PatternLayout> </Console> </Appenders> <Loggers> <Root level="info" additivity="false"> <appender-ref ref="Console" level="info" /> </Root> </Loggers> </Configuration>
当前Maven依赖
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.15.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.15.0</version> <exclusions> <exclusion> <artifactId>log4j-api</artifactId> <groupId>org.apache.logging.log4j</groupId> </exclusion> </exclusions> </dependency>
问题原因及解决方法
问题核心是缺少SLF4J到Log4j2的桥接依赖:SLF4J只是日志门面接口,本身不负责日志输出逻辑,必须通过桥接包将SLF4J的日志请求转发到Log4j2的实现层。
解决步骤
- 添加
log4j-slf4j-impl依赖,版本与现有Log4j2版本(2.15.0)保持一致:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.15.0</version> </dependency>
- 额外检查:
- 确认
log4j2.xml放在src/main/resources目录下,保证Log4j2能正确加载配置 - 排查是否存在其他日志框架依赖(如
slf4j-simple、logback-classic等),如有冲突需排除
- 确认
内容的提问来源于stack exchange,提问作者hafid
相关产品推荐
相关产品推荐

