解决 @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 注解未生效

解决方案:

  1. 确保 IDE 安装了 Lombok 插件

  2. 启用注解处理:

    • IntelliJ: Settings → Build → Compiler → Annotation Processors → Enable

  3. 添加 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 的类不在组件扫描范围内

解决方案:

  1. 确保类上有 @Component 或其他 Spring 注解

  2. 确保类在主应用类所在的包或其子包中

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>

验证步骤

  1. 检查依赖树:

    bash

    复制

    下载

    mvn dependency:tree

    查看是否有 SLF4J 实现和 Lombok

  2. 简单测试:

    java

    复制

    下载

    @SpringBootTest
    public class LogTest {
        @Test
        public void testLogOutput() {
            log.info("测试日志输出");  // 如果这里能输出,说明配置问题在你的类中
        }
    }
  3. 检查编译后的类:
    查看 target/classes 下编译后的类,应该已生成 private static final Logger log 字段

完整工作示例

  1. 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>
  1. 示例类:

java

复制

下载

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MyService {
    public void doSomething() {
        log.info("这个方法应该输出日志");
    }
}
  1. 测试类:

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 - 这是一条错误日志

常见问题排查

  1. 项目是否真的引入了 Lombok 处理器

  2. 是否有其他日志配置覆盖了默认设置

  3. 控制台是否被其他日志框架占用

  4. 解决 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

    这表明你的项目存在日志系统配置问题。以下是完整的解决方案:

    问题原因

  5. 混合使用日志框架:项目同时依赖了 Log4j 和 Logback

  6. 缺少日志配置:没有正确配置日志实现

  7. 依赖冲突:多个日志框架互相干扰

  8. 排除 Log4j 依赖:

  9. 添加 Logback 配置 (src/main/resources/logback-spring.xml):

  10. 排除默认 Logback:

  11. 添加 Log4j2 配置 (src/main/resources/log4j2.xml):

  12. 添加依赖(确保有):

  13. 添加基础配置 (src/main/resources/logback.xml):

  14. 创建一个测试类:

  15. 运行测试,你应该能看到类似输出:

  16. 多个日志框架冲突:

    bash

    复制

    下载

    mvn dependency:tree | grep log

    检查并排除不需要的日志依赖

  17. 配置文件位置错误:

    • 确保配置文件在 src/main/resources 下

    • 确保文件名正确(logback.xml 或 logback-spring.xml)

  18. Spring Profile 问题:
    可以使用 logback-spring.xml 并添加 profile 特定配置:

    xml

    复制

    下载

    运行

    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>
  19. IDE 缓存问题:

    • 清理并重新构建项目

    • 在 IntelliJ 中:File → Invalidate Caches / Restart

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐