Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理

概述

在日常的 Java 项目开发中,日志是最重要的调试与排查手段之一。为了便于开发时实时查看,同时在生产中追踪问题,我们通常希望实现以下日志管理目标:

  • ✅ 控制台实时输出日志,方便开发调试
  • ✅ 日志根据级别分类保存,例如:info.log、warn.log、error.log
  • ✅ 日志文件按日期滚动保存,防止文件过大
  • ✅ 日志保存在 logs/ 文件夹中,项目内统一管理

在本文中,我们将使用 Spring Boot + SLF4J + Logback 组合,完成这一目标。

为什么选择 SLF4J + Logback?

SLF4J 是一个日志"门面",可以灵活对接多种日志实现,如 Logback、Log4j、Log4j2。

Logback 是 Spring Boot 默认日志实现,功能强大、性能优越。

实战

假设现在有一个项目,项目的结构如下:

配置 application.yaml

yaml 复制代码
# 日志配置
logging:
  # 读取日志配置文件,即 resources 文件夹下的配置文件
  config: classpath:log4j2.xml
  level:
    # 默认整个项目的日志级别
    root: info
    # 如果你想细化项目日志级别,com.cbf下的日志级别是info
    # com.cbf: info

添加日志配置文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <!-- 日志存放路径(当前项目的 logs 文件夹) -->
  <property name="log.path" value="./logs"/>

  <!-- 日志输出格式 -->
  <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>

  <!-- 控制台输出 -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
  </appender>

  <!-- INFO 级别日志输出 -->
  <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-info.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 按天滚动 -->
      <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 保留60天历史 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <!-- ERROR 级别日志输出 -->
  <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <!-- 根日志记录器:所有未指定 logger 的日志都会走这里 -->
  <root level="info">
    <!-- 输出到控制台。 -->
    <appender-ref ref="console"/>
    <!-- 输出到 sys-info.log 文件(只记录 INFO 级别)。-->
    <appender-ref ref="file_info"/>
    <!-- 输出到 sys-error.log 文件(只记录 ERROR 级别)。 -->
    <appender-ref ref="file_error"/>
  </root>
</configuration>

效果检验

项目启动后,

  • 控制台将输出全部日志内容。
  • 项目根目录会生成 logs/ 文件夹。
  • 根据不同级别,日志被写入:
  • sys-info.log:包含 INFO 及以上所有级别
  • sys-error.log:只包含 ERROR 级别日志
  • 日志每天自动生成新文件,如:all.2025-06-05.log

输出效果如下:

相关推荐
行百里er6 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
高频因子挖掘机7 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
孟健8 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
2302_805771078 小时前
Day24:DDT+EXCEL数据驱动
功能测试·单元测试·自动化·测试用例·需求分析·web自动化
paopaokaka_luck8 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
SL_staff9 小时前
JVS混合架构实践:能力引擎+动态模型如何支撑企业级可持续交付
spring boot·低代码·全栈
码事漫谈9 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技9 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑9 小时前
@JsonInclude注解使用
spring boot·后端·spring
IT_陈寒9 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端