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>
相关推荐
abcnull5 小时前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡5 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan5 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054735 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路6 小时前
C++23概述
java·c++·c++23
专注API从业者7 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠7 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY7 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克38 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信