springboot中logback日志配置

在 Spring Boot 项目中,默认使用 Logback 作为日志框架。Logback 是一个高效、灵活的日志记录工具,支持多种日志格式和输出目标(如控制台、文件等)。通过配置 logback-spring.xml 文件,可以自定义日志的输出方式和格式。

以下是 Spring Boot 中 Logback 日志配置的详细说明:


1. 创建或修改 logback-spring.xml

在 Spring Boot 项目中,默认会使用 logback-spring.xml 文件来配置日志。如果该文件不存在,可以在 src/main/resources 目录下创建一个。

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 配置控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 配置错误日志输出 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/error.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/error-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 根日志配置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 自定义包的日志级别 -->
    <logger name="com.example" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>

    <!-- 配置错误日志 -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" level="ERROR">
        <appender-ref ref="ERROR_FILE"/>
    </logger>
</configuration>

2. 配置说明

2.1 日志格式

通过 <encoder> 标签可以配置日志的输出格式。常用占位符包括:

  • %d{yyyy-MM-dd HH:mm:ss.SSS}:日期和时间
  • [%thread]:线程名
  • %-5level:日志级别(右对齐,宽度 5)
  • %logger{36}:类名或包名(最多显示 36 个字符)
  • %msg:日志消息

2.2 控制台输出

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

配置控制台输出,日志会直接打印在终端。


2.3 文件输出

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

文件输出支持滚动策略,按天生成日志文件:

  • logs/app.log:当前日志文件
  • logs/app-yyyy-MM-dd.log:历史日志文件

滚动策略参数说明:

  • <fileNamePattern>:历史日志文件的命名规则
  • <maxHistory>:保留 30 天的历史日志

2.4 错误日志输出

<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

专门记录错误级别的日志,通过 <filter> 标签设置只记录 ERROR 级别的日志。


2.5 根日志配置

<root level="INFO">

设置根日志的级别为 INFO,并将输出目标指向控制台和文件。


2.6 自定义包的日志级别

通过 <logger> 标签可以为特定包或类配置不同的日志级别:

  • name="com.example":指定包名
  • level="DEBUG":设置日志级别为 DEBUG
  • additivity="false":表示不继承父 logger 的配置

3. 配置生效条件

  1. 确保 logback-spring.xml 文件位于 src/main/resources 目录下。
  2. 如果项目中没有该文件,Spring Boot 会使用默认日志配置。

4. 常见问题

4.1 日志文件不生成
  • 检查 <file><fileNamePattern> 的路径是否正确。
  • 确保程序有写入权限。
4.2 自定义包的日志不生效
  • 确保 name 属性与实际类名或包名完全一致。
  • 确保 additivity="false",避免继承父 logger 的配置。
4.3 日志级别无效
  • 确保 <logger> 标签中的 level 配置正确(如 DEBUG, INFO, ERROR)。
  • 确保没有其他配置覆盖了该日志级别。

5. 总结

通过以上配置,可以灵活地定义 Spring Boot 应用的日志输出方式和格式。可以根据实际需求调整日志级别、输出目标和文件路径,从而更好地监控和调试应用。

相关推荐
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风14 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠14 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z1234567898615 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112315 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python