Logback 配置精细化包日志控制

用于 Spring Boot 应用的日志管理,核心作用是按级别分离日志、按时间滚动存储、仅保留 3 天日志,同时支持精细化包日志控制。

一、核心功能与配置解读

1. 基础配置(全局参数)

  • debug="true":开启 Logback 内部调试模式,启动时输出配置加载细节(仅建议开发 / 调试用)。
  • LOG_PATH="log/":日志存储路径(相对路径,应用启动目录下的 log 文件夹)。
  • LOG_PATTERN:日志输出格式,包含「时间 + 日志级别 + 类名 + 线程名 + 日志信息」,便于问题定位。

2. 三大日志输出目标(Appender)

Appender 名称 作用 核心特性
CONSOLE 控制台输出 输出所有符合级别的日志,用于实时查看。
FILE 全量日志文件 按天生成日志文件(命名格式 all.20241029.log),保留 3 天,总大小限制 1GB。
FILE_ERROR 错误日志文件 仅输出 WARN 及以上级别日志(错误、警告),独立存储便于快速排查异常,同样保留 3 天。

3. 日志级别与输出规则

  • 全局级别(root):INFO,即默认输出 INFO、WARN、ERROR 级别日志。
    • 全局日志会同时输出到「控制台 + 全量文件 + 错误文件」。
  • 自定义包级别(com.example):DEBUG,该包下输出 DEBUG 及以上级别日志(更详细)。
    • additivity="false":关闭日志继承,避免该包日志重复输出到父级 Appender(仅输出到自身指定的控制台 + 全量文件)。

二、实际使用效果

1.日志文件生成:

  • 全量日志:log/all.20241029.log(每天一个文件)。
  • 错误日志:log/error.20241029.log(仅存储警告和错误)。

2.日志清理:

  • 超过 3 天的日志文件会自动删除(maxHistory=3)。
  • 所有日志文件总大小超过 1GB 时,会优先删除最旧的文件(totalSizeCap=1GB)。

3.包日志差异:

  • com.example 包的 DEBUG 日志(如调试信息)会输出到控制台和全量文件。
  • 其他包仅输出 INFO 及以上级别日志,不包含 DEBUG 细节。
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!-- 日志存储路径(可自定义,如 /var/log/myapp/ 或相对路径 logs/) -->
    <property name="LOG_PATH" value="log/"/>
    <!-- 日志输出格式 -->
    <property name="LOG_PATTERN"  value="%d{yyyy-MM-dd HH:mm:ss} %p [Class:%C{1}->Thread:%t] %m %n"/>

    <!-- 控制台日志:输出全部日志到控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>${LOG_PATTERN}</Pattern>
        </encoder>
    </appender>

    <!-- 文件日志:输出全部日志到文件() -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/all.%d{yyyyMMdd}.log</fileNamePattern>
            <!-- 保留3天的日志(超过3天自动删除) -->
            <maxHistory>3</maxHistory>
            <!-- 可选:限制总日志大小(防止磁盘占满,如总大小不超过1GB) -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 错误日志:用于将错误日志输出到独立文件 -->
    <appender name="FILE_ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error.%d{yyyyMMdd}.log</fileNamePattern>
            <!-- 保留3天的日志(超过3天自动删除) -->
            <maxHistory>3</maxHistory>
            <!-- 可选:限制总日志大小(防止磁盘占满,如总大小不超过1GB) -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>

    <!-- 全局日志级别(root 级别) -->
    <root>
        <level value="INFO"/>
        <appender-ref ref="CONSOLE"/><!-- 输出到控制台 -->
        <appender-ref ref="FILE"/> <!-- 输出到文件 -->
        <appender-ref ref="FILE_ERROR"/>
    </root>

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

</configuration>
相关推荐
大傻^1 小时前
Spring AI Alibaba MCP协议实战:模型上下文协议集成与工具调用
java·人工智能·后端·spring·elasticsearch·springaialibaba
Via_Neo1 小时前
JAVA中对数的表达,将浮点数转为保留指定位数的字符串
java·开发语言
左左右右左右摇晃1 小时前
String、StringBuffer、StringBuilder的区别
java·笔记
稻草猫.1 小时前
MyBatis进阶:动态SQL与MyBatis Generator插件使用
java·数据库·后端·spring·mvc·mybatis
xiangpanf1 小时前
PHP vs Go:30秒读懂核心差异
java·开发语言
爱喝一杯白开水1 小时前
Java List 常用方法全攻略
java·list·排序算法
李白的粉1 小时前
基于springboot的在线问卷调查系统
java·spring boot·毕业设计·课程设计·源代码·在线问卷调查系统
程序员老乔1 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(一):你的Java该升级了
java·spring boot·python
.select.1 小时前
C++ 单例模式
java·c++·单例模式
鬼蛟1 小时前
Spring MVC
java·spring·mvc