java全家桶之22:@Slf4j 注解的 log 不输出日志问题
解决 @Slf4j 注解的 log 不输出日志问题
当你在 Spring 项目中使用 @Slf4j 注解但 log.info("1") 没有输出时,可能是以下几个原因导致的:
常见原因及解决方案
1. 缺少 SLF4J 实现依赖
问题:只有 SLF4J 接口没有具体实现
解决方案:添加日志实现依赖(如 Logback)
xml
复制
下载
运行
<!-- Maven 依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
2. Lombok 未正确配置
问题:Lombok 的 @Slf4j 注解未生效
解决方案:
-
确保 IDE 安装了 Lombok 插件
-
启用注解处理:
-
IntelliJ: Settings → Build → Compiler → Annotation Processors → Enable
-
-
添加 Lombok 依赖:
xml
复制
下载
运行
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
3. 日志级别设置过高
问题:当前日志级别高于 INFO
解决方案:在 application.properties 或 application.yml 中配置:
properties
复制
下载
# application.properties logging.level.root=info logging.level.your.package=debug
或
yaml
复制
下载
# application.yml
logging:
level:
root: info
your.package: debug
4. 缺少日志配置文件
问题:没有配置日志输出格式和目标
解决方案:在 src/main/resources 下添加 logback-spring.xml:
xml
复制
下载
运行
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
5. 包扫描问题
问题:包含 @Slf4j 的类不在组件扫描范围内
解决方案:
-
确保类上有
@Component或其他 Spring 注解 -
确保类在主应用类所在的包或其子包中
6. 多日志框架冲突
问题:存在多个日志框架冲突
解决方案:排除冲突的日志依赖
xml
复制
下载
运行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
验证步骤
-
检查依赖树:
bash
复制
下载
mvn dependency:tree
查看是否有 SLF4J 实现和 Lombok
-
简单测试:
java
复制
下载
@SpringBootTest public class LogTest { @Test public void testLogOutput() { log.info("测试日志输出"); // 如果这里能输出,说明配置问题在你的类中 } } -
检查编译后的类:
查看 target/classes 下编译后的类,应该已生成private static final Logger log字段
完整工作示例
-
pom.xml 关键部分:
xml
复制
下载
运行
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
-
示例类:
java
复制
下载
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class MyService {
public void doSomething() {
log.info("这个方法应该输出日志");
}
}
-
测试类:
java
复制
下载
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@Test
public void testLogging() {
myService.doSomething();
}
}
如果按照以上步骤配置后日志仍然不输出,请检查:
解决方案
方案一:使用 Logback(Spring Boot 默认推荐)
xml
复制
下载
运行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
xml
复制
下载
运行
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
方案二:使用 Log4j2
xml
复制
下载
运行
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
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="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
方案三:最小化配置(快速解决)
如果你只需要快速消除警告,可以添加最简单的 Logback 配置:
xml
复制
下载
运行
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
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>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
验证解决方案
java
复制
下载
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingTest {
private static final Logger log = LoggerFactory.getLogger(LoggingTest.class);
@Test
public void testLogging() {
log.info("这是一条测试日志信息");
log.error("这是一条错误日志");
}
}
通过以上步骤,你应该能够解决日志系统配置问题并消除相关警告。
text
复制
下载
12:34:56.789 [main] INFO com.example.LoggingTest - 这是一条测试日志信息 12:34:56.790 [main] ERROR com.example.LoggingTest - 这是一条错误日志
常见问题排查
-
项目是否真的引入了 Lombok 处理器
-
是否有其他日志配置覆盖了默认设置
-
控制台是否被其他日志框架占用
-
解决 Log4j 和 Logback 日志系统警告问题
当你在 Spring 项目中看到以下警告时:
text
复制
下载
log4j:WARN No appenders could be found for logger (org.springframework.test.context.BootstrapUtils). log4j:WARN Please initialize the log4j system properly. 无法找到logback
这表明你的项目存在日志系统配置问题。以下是完整的解决方案:
问题原因
-
混合使用日志框架:项目同时依赖了 Log4j 和 Logback
-
缺少日志配置:没有正确配置日志实现
-
依赖冲突:多个日志框架互相干扰
-
排除 Log4j 依赖:
-
添加 Logback 配置 (
src/main/resources/logback-spring.xml): -
排除默认 Logback:
-
添加 Log4j2 配置 (
src/main/resources/log4j2.xml): -
添加依赖(确保有):
-
添加基础配置 (
src/main/resources/logback.xml): -
创建一个测试类:
-
运行测试,你应该能看到类似输出:
-
多个日志框架冲突:
bash
复制
下载
mvn dependency:tree | grep log
检查并排除不需要的日志依赖
-
配置文件位置错误:
-
确保配置文件在
src/main/resources下 -
确保文件名正确(
logback.xml或logback-spring.xml)
-
-
Spring Profile 问题:
可以使用logback-spring.xml并添加 profile 特定配置:xml
复制
下载
运行
<springProfile name="dev"> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> </root> </springProfile> -
IDE 缓存问题:
-
清理并重新构建项目
-
在 IntelliJ 中:File → Invalidate Caches / Restart
-
更多推荐
所有评论(0)