开发者

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

开发者 https://www.devze.com 2025-05-14 10:33 出处:网络 作者: Clf丶忆笙
目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Spring Boot默认日志框架1.3 基本日志使用示例二、Logback配置文件详解2.1 配置文件加载顺序2.2 配置文件基本结构三、核心组件深度解析3.1 <con
目录
  • 一、Logback简介与Spring Boot集成基础
    • 1.1 Logback是什么?
    • 1.2 Spring Boot默认日志框架
    • 1.3 基本日志使用示例
  • 二、Logback配置文件详解
    • 2.1 配置文件加载顺序
    • 2.2 配置文件基本结构
  • 三、核心组件深度解析
    • 3.1 <configuration> 元素
    • 3.2 <property> 元素
    • 3.3 <timestamp> 元素
    • 3.4 <appender> 元素
      • 3.4.1 Appender通用结构
      • 3.4.2 ConsoleAppender
      • 3.4.3 FileAppender
      • 3.4.4 RollingFileAppender
      • 3.4.5 滚动策略详解
      • 3.4.6 其他Appender类型
    • 3.5 <encoder> 元素
      • 3.5.1 PatternLayoutEncoder
      • 3.5.2 LayoutWrappingEncoder
    • 3.6 <filter> 元素
      • 3.6.1 LevelFilter
      • 3.6.2 ThresholdFilter
      • 3.6.3 EvaLuatorFilter
      • 3.6.4 自定义Filter
    • 3.7 <logger> 和 <root> 元素
      • 3.7.1 <logger>
      • 3.7.2 <root>
    • 3.8 <turboFilter> 元素
    • 四、高级配置与使用技巧
      • 4.1 日志级别详解
        • 4.2 使用Spring Boot属性
          • 4.3 基于Profile的配置
            • 4.4 日志文件滚动策略
              • 4.5 日志过滤
                • 4.6 异步日志
                  • 4.7 MDC (Mapped Diagnostic Context)
                    • 4.8 条件配置
                    • 五、最佳实践与常见问题
                      • 5.1 日志最佳实践
                        • 5.2 常见问题解决方案
                        • 六、完整配置示例
                          • 6.1 开发环境配置 (logback-spring-dev.XML)
                            • 6.2 生产环境配置 (logback-spring-prod.xml)

                            一、Logback简介与Spring Boot集成基础

                            1.1 Logback是什么?

                            Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计。它由三个模块组成:

                            • logback-core:基础模块
                            • logback-classic:实现了SLF4J API
                            • logback-Access:与Servlet容器集成提供HTTP访问日志功能

                            为什么选择Logback?

                            • 性能比Log4j更高
                            • 丰富的文档
                            • 自动重新加载配置文件
                            • 自动压缩日志文件
                            • 更灵活的过滤功能
                            • 更丰富的日志格式

                            1.2 Spring Boot默认日志框架

                            Spring Boot默认使用Logback作为日志框架,当你使用spring-boot-starterspring-boot-starter-web时,已经自动引入了Logback依赖。

                            <!-- 在Spring Boot项目中,你不需要显式添加Logback依赖 -->
                            <dependency>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-starter</artifactId>
                            </dependency>

                            1.3 基本日志使用示例

                            import org.slf4j.Logger;
                            import org.slf4j.LoggerFactory;
                            @RestController
                            public class DemoController {
                                // 获取Logger实例,通常以当前类作为参数
                                private static final Logger logger = LoggerFactory.getLogger(DemoController.class);
                                @GetMapping("/demo")
                                public String demo() {
                                    logger.trace("This is a TRACE level message");
                                    logger.debug("This is a DEBUG level message");
                                    logger.info("This is an INFO level message");
                                    logger.warn("This is a WARN level message");
                                    logger.error("This is an ERROR level message");
                                    return "Check your console or log file!";
                                }
                            }

                            二、Logback配置文件详解

                            2.1 配置文件加载顺序

                            Spring Boot会按以下顺序查找Logback配置文件:

                            • logback-spring.xml (推荐使用)
                            • logback.xml
                            • 如果以上都不存在,使用默认配置

                            为什么推荐使用logback-spring.xml?

                            • 可以使用Spring Boot特有的<springProperty>标签
                            • 支持Spring Profile特定的配置

                            2.2 配置文件基本结构

                            一个完整的Logback配置文件通常包含以下部分:

                            <?xml version="1.0" encoding="UTF-8"?>
                            <configuration>
                                <!-- 属性定义 -->
                                <property name="LOG_HOME" value="./logs" />
                                <!-- 定义appender -->
                                <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                                    <!-- encoder定义日志输出格式 -->
                                    <encoder>
                                        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                    </encoder>
                                </appender>
                               www.devze.com <!-- 定义logger -->
                                <logger name="com.example.demo" level="DEBUG" />
                                <!-- 根logger配置 -->
                                <root level="INFO">
                                    <appender-ref ref="CONSOLE" />
                                </root>
                            </configuration>

                            三、核心组件深度解析

                            3.1 <configuration> 元素

                            <configuration>是Logback配置文件的根元素,支持以下重要属性:

                            属性名类型默认值描述
                            scanbooleanfalse是否监视配置文件变化
                            scanPeriod时间间隔1分钟检查配置文件变化的时间间隔
                            debugbooleanfalse是否打印Logback内部调试信息
                            packagingDatabooleanfalse是否包含调用者信息(影响性能)

                            示例:

                            <configuration scan="true" scanPeriod="30 seconds" debug="false">
                                <!-- 配置内容 -->
                            </configuration>

                            最佳实践:

                            • 开发环境可以开启scan以便动态调整配置
                            • 生产环境应关闭scandebug以避免性能开销
                            • 仅在需要诊断问题时开启packagingData

                            3.2 <property> 元素

                            用于定义变量,可在配置文件中重复使用:

                            属性:

                            • name: 变量名(必填)
                            • value: 变量值
                            • file: 从外部文件加载属性
                            • resource: 从classpath资源加载属性
                            • scope: 作用域(“local"或"context”)

                            示例:

                            <!-- 直接定义 -->
                            <property name="LOG_HOME" value="/var/logs/myappSTjQdG" />
                            <!-- 从系统环境变量获取 -->
                            <property name="LOG_HOME" value="${LOG_DIR:-./logs}" />
                            <!-- 从外部文件加载 -->
                            <property file="conf/logback.properties" />
                            <!-- 在Spring Boot中使用 -->
                            <springProperty scope="context" name="appName" source="spring.application.name" />

                            变量引用方式: ${变量名}

                            作用域说明:

                            • local: 仅在当前配置文件中有效
                            • context: 在整个LoggerContext中有效

                            3.3 <timestamp> 元素

                            用于定义时间戳变量:

                            属性:

                            • key: 变量名
                            • datePattern: 日期格式(遵循Java SimpleDateFormat)
                            • timeReference: 时间参考点("contextBirth"或当前时间)

                            示例:

                            <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss" />
                            <property name="LOG_FILE" value="${LOG_HOME}/log-${bySecond}.log" />

                            3.4 <appender> 元素

                            Appender负责定义日志输出目的地,是Logback最核心的组件之一。

                            3.4.1 Appender通用结构

                            <appender name="UNIQUE_NAME" class="APPENDER_CLASS">
                                <!-- 过滤器配置 -->
                                <filter class="ch.qos.logback.core.filter.FilterClass" />
                                <!-- 布局/编码器配置 -->
                                <encoder>
                                    <pattern>%d{yyyy-MM-dd HH:mm:ss} %msg%n</pattern>
                                </encoder>
                                <!-- 其他特有配置 -->
                            </appender>

                            3.4.2 ConsoleAppender

                            输出日志到控制台(System.out或System.err)

                            特有属性:

                            • target: 输出目标(“System.out"或"System.err”),默认为System.out
                            • withJansi: 是否启用ANSI颜色支持(需jansi库)

                            示例:

                            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                                <target>System.out</target>
                                <encoder>
                                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                </encoder>
                            </appender>

                            3.4.3 FileAppender

                            输出日志到单个文件

                            特有属性:

                            • file: 日志文件路径
                            • append: 是否追加到文件末尾(默认为true)
                            • prudent: 是否安全模式(多进程写入同一文件时使用)

                            示例:

                            <appender name="FILE" class="ch.qos.logback.core.FileAppender">
                                <file>${LOG_HOME}/myapp.log</file>
                                <append>true</append>
                                <encoder>
                                    <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                </encoder>
                            </appender>

                            3.4.4 RollingFileAppender

                            支持日志文件滚动的增强FileAppender,必须配置rollingPolicy

                            特有属性:

                            • file: 当前活动日志文件路径
                            • rollingPolicy: 滚动策略配置
                            • triggeringPolicy: 触发策略配置

                            示例:

                            <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                <file>${LOG_HOME}/myapp.log</file>
                                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                                    <fileNamePattern>${LOG_HOME}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
                                    <maxHistory>30</maxHistory>
                                </rollingPolicy>
                                <encoder>
                                    <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                </encoder>
                            </appender>

                            3.4.5 滚动策略详解

                            Logback提供多种滚动策略:

                            TimeBasedRollingPolicy基于时间的滚动策略

                            属性说明
                            fileNamePattern滚动文件命名模式(必须包含%d)
                            maxHistory保留的历史日志文件最大数量
                            totalSizeCap所有日志文件总大小限制
                            cleanHistoryOnStart启动时是否清理历史文件(默认false)

                            SizeAndTimeBasedRollingPolicy

                            结合时间和大小的滚动策略

                            属性说明
                            fileNamePattern必须包含%d和%i
                            maxFileSize单个文件最大大小
                            maxHistory保留的历史日志文件最大数量
                            totalSizeCap所有日志文件总大小限制

                            FixedwindowRollingPolicy

                            固定窗口滚动策略

                            属性说明
                            minIndex窗口最小索引
                            maxIndex窗口最大索引
                            fileNamePattern必须包含%i

                            3.4.6 其他Appender类型

                            Appender类型类名用途
                            SMTPAppenderch.qos.logback.classic.net.SMTPAppender通过邮件发送错误日志
                            DBAppenderch.qos.logback.classic.db.DBAppender存储日志到数据库
                            SocketAppenderch.qos.logback.classic.net.SocketAppender通过网络socket发送日志
                            SyslogAppenderch.qos.logback.classic.net.SyslogAppender发送日志到syslog服务器

                            3.5 <encoder> 元素

                            Encoder负责将日志事件转换为字节数组并写入输出流。

                            3.5.1 PatternLayoutEncoder

                            最常用的Encoder实现,支持丰富的模式表达式:

                            <encoder class="ch.qos.lo编程客栈gback.classic.encoder.PatternLayoutEncoder">
                                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                <outputPatternAsHeader>false</outputPatternAsHeader>
                                <charset>UTF-8</charset>
                            </encoder>

                            常用转换符:

                            转换符说明
                            %d日期时间
                            %thread线程名
                            %level日志级别
                            %loggerLogger名称
                            %msg日志消息
                            %n换行符
                            %caller调用者信息
                            %mdcMDC内容
                            %ex异常堆栈
                            %marker日志标记

                            日期格式:

                            %d{格式},格式遵循Java SimpleDateFormat:

                            • %d{yyyy-MM-dd HH:mm:ss.SSS}
                            • %d{ISO8601}
                            • %d{ABSOLUTE}

                            Logger名称缩写:

                            %logger{长度},如%logger{36}表示最长显示36个字符

                            3.5.2 LayoutWrappingEncoder

                            包装其他Layout实现的Encoder:

                            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                                <layout class="ch.qos.logback.classic.PatternLayout">
                                    <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
                                </layout>
                            </encoder>

                            3.6 <filter> 元素

                            Filter用于对日志事件进行过滤,可以配置在Appender或Logger上。

                            3.6.1 LevelFilter

                            精确匹配特定级别:

                            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                                <level>ERROR</level>
                                <onMatch>ACCEPT</onMatch>  <!-- 匹配时的动作 -->
                                <onMismatch>DENY</onMismatch>  <!-- 不匹配时的动作 -->
                            </filter>

                            动作类型:

                            • ACCEPT: 接受日志事件
                            • DENY: 拒绝日志事件
                            • NEUTRAL: 中立,由后续过滤器决定

                            3.6.2 ThresholdFilter

                            阈值过滤,接受>=指定级别的日志:

                            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                                <level>WARN</level>
                            </filter>

                            3.6.3 EvaluatorFilter

                            使用Groovy表达式过滤:

                            <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                                <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
                                    <expression>
                                        e.level.toInt() >= WARN.toInt() && 
                                        e.getMessage().contains("important")
                                    </expression>
                                </evaluator>
                                <onMatch>ACCEPT</onMatch>
                                <onMismatch>DENY</onMismatch>
                            </filter>

                            3.6.4 自定义Filter

                            实现ch.qos.logback.core.filter.Filter接口:

                            public class SampleFilter extends Filter<ILoggingEvent> {
                                @Override
                                public FilterReply decide(ILoggingEvent event) {
                                    if (event.getMessage().contains("special")) {
                                        return FilterReply.ACCEPT;
                                    }
                                    return FilterReply.NEUTRAL;
                                }
                            }

                            配置:

                            <filter class="com.example.SampleFilter" />

                            3.7 <logger> 和 <root> 元素

                            3.7.1 <logger>

                            配置特定Logger的日志行为:

                            属性:

                            • name: Logger名称(通常为包或类名)
                            • level: 日志级别
                            • additivity: 是否向上传递日志(默认为true)

                            示例:

                            <!-- 配置特定包的日志级别 -->
                            <logger name="com.example" level="DEBUG" />
                            <!-- 配置特定类的日志级别并禁用additivity -->
                            <logger name="com.example.Service" level="TRACE" additivity="false">
                                <appender-ref ref="SPECIAL_APPENDER" />
                            </logger>

                            3.7.2 <root>

                            配置根Logger,所有Logger最终都继承自Root Logger:

                            属性:

                            level: 根Logger的日志级别

                            示例:

                            <root level="INFO">
                                <appender-ref ref="CONSOLE" />
                                <appender-ref ref="FILE" />
                            </root>

                            Logger继承规则:

                            • 如果没有配置特定logger,则继承最近的祖先logger的级别
                            • 如果没有配置任何logger,则使用root logger的级别
                            • 如果配置了logger但没有指定级别,则继承最近的祖先logger的级别

                            3.8 <turboFilter> 元素

                            TurboFilter是全局过滤器,在所有Logger之前执行:

                            <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
                                <Marker>important</Marker>
                                <OnMatch>ACCEPT</OnMatch>
                                <OnMismatch>NEUTRAL</OnMismatch>
                            </turboFilter>

                            常用TurboFilter:

                            • MDCFilter: 基于MDC值过滤
                            • DynamicThresholdFilter: 动态阈值过滤
                            • LoggerFilter: 基于Logger名称过滤

                            四、高级配置与使用技巧

                            4.1 日志级别详解

                            Logback支持以下日志级别(从低到高):

                            • TRACE
                            • DEBUG
                            • INFO
                            • WARN
                            • ERROR

                            日志级别继承规则:

                            • 如果没有配置特定logger,则继承最近的祖先logger的级别
                            • 如果没有配置任何logger,则使用root logger的级别

                            4.2 使用Spring Boot属性

                            logback-spring.xml中可以使用Spring Boot的属性:

                            <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="myApp"/>
                            <property name="LOG_HOME" value="./logs/${appName}" />

                            4.3 基于Profile的配置

                            可以为不同的Spring Profile配置不同的日志策略:

                            <springProfile name="dev">
                                <logger name="com.example.demo" level="DEBUG" />
                            </springProfile>
                            <springProfile name="prod">
                                <logger name="com.example.demo" level="INFO" />
                                <root level="WARN">
                                    <appender-ref ref="FILE" />
                                </root>
                            </springProfile>

                            4.4 日志文件滚动策略

                            TimeBasedRollingPolicy: 基于时间的滚动策略

                            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                                <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
                                <maxHistory>30</maxHistory>
                            </rollingPolicy>

                            SizeAndTimeBasedRollingPolicy: 基于时间和大小的滚动策略

                            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                                <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                                <maxFileSize>10MB</maxFileSize>
                                <maxHistory>30</maxHistory>
                                <totalSizeCap>1GB</totalSizeCap>
                            </rollingPolicy>

                            4.5 日志过滤

                            LevelFilter: 按级别过滤

                            <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                                    <level>ERROR</level>
                                    <onMatch>ACCEPT</onMatch>
                                    <onMismatch>DENY</onMismatch>
                                </filter>
                                <!-- 其他配置 -->
                            </appender>

                            ThresholdFilter: 阈值过滤

                            <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                                    <level>WARN</level>
                                </filter>
                                <!-- 其他配置 -->
                            </appender>

                            4.6 异步日志

                            使用AsyncAppender可以提高日志性能:

                            <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
                                <queueSize>512</queueSize>
                                <discardingThreshold>0</discardingThreshold>
                                <includeCallerData>false</includeCallerData>
                                <appender-ref ref="FILE" />
                            </appender>

                            参数说明:

                            • queueSize: 队列大小(默认256)
                            • discardingThreshold: 当队列剩余容量小于此值时,丢弃TRACE、DEBUG和INFO级别的日志(默认队列大小的20%)
                            • includeCallerData: 是否包含调用者数据(影响性能)

                            最佳实践:

                            • 生产环境推荐队列大小设置为512-2048
                            • 除非必要,否则关闭includeCallerData
                            • 对于关键日志,设置discardingThreshold=0确保不丢弃

                            4.7 MDC (Mapped Diagnostic Context)

                            MDC可以用于在日志中添加上下文信息:

                            import org.slf4j.MDC;
                            public class UserService {
                                private static final Logger logger = LoggerFactory.getLogger(UserService.class);
                                public void login(String userId) {
                                    MDC.put("userId", userId);
                                    logger.info("User logged in");
                                    MDC.remove("userId");
                                }
                            }

                            在配置文件中使用:

                            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{userId}] %-5level %logger{36} - %msg%n</pattern>

                            高级用法:

                            <!-- 仅当MDC中存在userId时才显示 -->
                            <pattern>%d{yyyy-MM-dd} [%thread] %mdc{userId:-} %-5level %logger{36} - %msg%n</pattern>

                            4.8 条件配置

                            使用<if>条件语句(需要Janino库):

                            <if condition='property("env").equals("prod")'>
                                <then>
                                    <root level="WARN">
                                        <appender-ref ref="FILE" />
                                    </root>
                                </then>
                                <else>
                                    <root level="DEBUG">
                                        <appender-ref ref="CONSOLE" />
                                    </root>
                                </else>
                            </if>

                            五、最佳实践与常见问题

                            5.1 日志最佳实践

                            合理使用日志级别

                            • TRACE: 非常详细的系统运行信息,通常只在开发时使用
                            • DEBUG: 调试信息,有助于诊断问题
                            • INFO: 重要的业务处理信息
                            • WARN: 潜在的问题,但系统还能正常工作
                            • ERROR: 错误事件,但系统还能继续运行

                            日志内容规范

                            • 记录有意义的业务信息
                            • 避免记录敏感信息(密码、信用卡号等)
                            • 异常应该记录堆栈(使用logger.error(“message”, e))

                            性能考虑

                            • 生产环境避免使用DEBUG级别
                            • 谨慎使用调用者数据(%C, %M, %F, %L等)
                            • 考虑使用异步日志

                            5.2 常见问题解决方案

                            问题1:日志文件不滚动

                            • 检查fileNamePattern中的日期模式
                            • 确保日志量达到滚动条件
                            • 检查文件权限

                            解决方案

                            <!-- 确保配置了触发策略 -->
                            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                                <fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                                <maxFileSize>50MB</maxFileSize>  <!-- 必须配置 -->
                                <maxHistory>30</maxHistory>
                            </rollingPolicy>

                            问题2:日志文件太大

                            • 调整maxFileSizemaxHistory
                            • 使用totalSizeCap限制总大小
                            • 考虑按级别分离日志文件

                            问题3:日志输出不全

                            • 检查logger的级别设置
                            • 检查是否有过滤器过滤掉了日志
                            • 检查是否有多个配置文件的冲突

                            问题4:日志输出乱码

                            解决方案

                            <encoder>
                                <pattern>%msg%n</pattern>
                                <charset>UTF-8</charset>  <!-- 明确指定字符集 -->
                            </encoder>

                            六、完整配置示例

                            6.1 开发环境配置 (logback-spring-dev.xml)

                            <?xml version="1.0" encoding="UTF-8"?>
                            <!-- Logback配置文件的根标签,所有配置元素都需包含在此标签内 -->
                            <configuration>
                                <!-- 属性定义部分,通过 <property> 标签定义可复用的属性,方便在配置文件中引用 -->
                                <!-- 定义日志文件存储的主目录 -->
                                <property name="LOG_HOME" value="/var/logs/myapp" />
                                <!-- 定义日志输出的格式模式,包含日期时间、线程名、日志级别、日志记录器名称和日志消息 -->
                                <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
                                <!-- 控制台Appender配置,用于将日志输出到控制台 -->
                                <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                                    <!-- 编码器配置,将日志事件转换为指定格式的字符串 -->
                                    <encoder>
                                        <!-- 使用前面定义的日志格式模式 -->
                                        <pattern>${LOG_PATTERN}</pattern>
                                    </encoder>
                                    <!-- 过滤器配置,只允许指定级别及以上的日志通过 -->
                                    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                                        <!-- 设置过滤级别为 WARN,即只输出 WARN 及以上级别的日志 -->
                                        <level>WARN</level>
                                    </filter>
                                </appender>
                                <!-- 主文件Appender配置,用于将日志输出到文件,并支持滚动策略 -->
                                <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                    <!-- 指定日志文件的路径,使用前面定义的日志主目录 -->
                                    <file>${LOG_HOME}/application.log</file>
                                    <!-- 编码器配置,将日志事件转换为指定格式的字符串 -->
                                    <encoder>
                                        <!-- 使用前面定义的日志格式模式 -->
                                        <pattern>${LOG_PATTERN}</pattern>
                                    </encoder>
                                    <!-- 滚动策略配置,基于文件大小和时间进行滚动 -->
                                    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                                        <!-- 滚动后的文件命名模式,包含日期和序号 -->
                                        <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                                        <!-- 单个日志文件的最大大小,超过此大小将进行滚动 -->
                                        <maxFileSize>50MB</maxFileSize>
                                        <!-- 保留的历史日志文件的最大天数 -->
                                        <maxHistory>30</maxHistory>
                                        <!-- 所有日志文件的总大小上限 -->
                                        <totalSizeCap>5GB</totalSizeCap>
                                    </rollingPolicy>
                                </appender>
                                <!-- 错误日志Appender配置,专门用于记录 ERROR 级别的日志 -->
                                <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                    <!-- 指定错误日志文件的路径,使用前面定义的日志主目录 -->
                                    <file>${LOG_HOME}/error.log</file>
                                    <!-- 编码器配置,将日志事件转换为指定格式的字符串 -->
                                    <encoder>
                                        <!-- 使用前面定义的日志格式模式 -->
                                        <pattern>${LOG_PATTERN}</pattern>
                                    </encoder>
                                    <!-- 过滤器配置,只允许 ERROR 级别的日志通过 -->
                                    <filter class="ch.qos.logback.classic.filter.LevelFilter">
                                        <!-- 设置过滤级别为 ERROR -->
                                        <level>ERROR</level>
                                        <!-- 当日志级别匹配时,允许通过 -->
                                        <onMatch>ACCEPT</onMatch>
                                        <!-- 当日志级别不匹配时,拒绝通过 -->
                                        <onMismatch>DENY</onMismatch>
                                    </filter>
                                    <!-- 滚动策略配置,基于时间进行滚动 -->
                                    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                                        <!-- 滚动后的文件命名模式,包含日期 -->
                                        <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
                                        <!-- 保留的历史错误日志文件的最大天数 -->
                                        <maxHistory>90</maxHistory>
                                    </rollingPolicy>
                                </appender>
                                <!-- 异步Appender配置,用于异步处理日志,提高性能 -->
                                <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
                                    <!-- 异步队列的大小,即最多可缓存的日志事件数量 -->
                                    <queueSize>1024</queueSize>
                                    <!-- 丢弃阈值,当队列剩余空间小于此值时,会丢弃部分日志事件,设置为 0 表示不丢弃 -->
                                    <discardingThreshold>0</discardingThreshold>
                                    <!-- 引用前面定义的主文件Appender,将异步处理后的日志输出到该 Appender -->
                                    <appender-ref ref="FILE" />
                                </appender>
                                <!-- Logger配置部分,用于指定不同包或类的日志级别和输出目的地 -->
                                <!-- 针对 com.example 包及其子包,设置日志级别为 INFO -->
                                <logger name="com.example" level="INFO" />
                                <!-- 针对 org.springframework 包及其子包,设置日志级别为 WARN -->
                                <logger name="org.springframework" level="WARN" />
                                <!-- 针对 org.hibernate.SQL 类,设置日志级别为 DEBUG,并关闭日志的追加性 -->
                                <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
                                    <!-- 只将该类的日志输出到主文件Appender -->
                                    <appender-ref ref="FILE" />
                                </logger>
                                <!-- Root Logger配置,是所有 Logger 的父 Logger,设置全局的日志级别和输出目的地 -->
                                <root level="INFO">
                                    <!-- 将日志输出到控制台Appender -->
                                    <appender-ref ref="CONSOLE" />
                                    <!-- 将日志异步输出到主文件Appender -->
                                    <appender-ref ref="ASYNC_FILE" />
                                    <!-- 将 ERROR 级别的日志输出到错误日志Appender -->
                                    <appender-ref ref="ERROR_FILE" />
                                </root>
                            </configuration>

                            6.2 生产环境配置 (logback-spring-prod.xml)

                            <?xml version="1.0" encoding="UTF-8"?>
                            <!-- Logback 配置文件的根标签,所有配置项都需包含在其中 -->
                            <configuration>
                                <!-- 使用 springProperty 标签从 Spring 上下文中获取属性值。
                                     scope="context" 表示从 Spring 上下文获取属性,
                                     name="appName" 定义了属性名,
                                     source="spring.application.name" 指定从 Spring 配置中获取名为 spring.application.name 的属性值,
                                     defaultValue="myApp" 若未获取到属性值,则使用默认值 myApp -->
                                <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="myApp"/>
                                <!-- 定义日志存储的主目录属性,路径为 /var/log/ 加上前面获取的js应用名称 -->
                                <property name="LOG_HOME" value="/var/log/${appName}" />
                                <!-- 定义日志输出的格式模式,包含日期时间、线程名、日志级别、日志记录器名称和日志消息 -->
                                <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
                                <!-- 异步文件输出 Appender 配置,将日志异步写入文件以提高性能 -->
                                <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
                                    <!-- 异步队列的大小,即最多可缓存的日志事件数量为 512 -->
                                    <queueSize>512</queueSize>
                                    <!-- 丢弃阈值,设置为 0 表示不丢弃日志事件 -->
                                    <discardingThreshold>0</discardingThreshold>
                                    <!-- 引用名为 FILE 的 Appender,将异步处理后的日志发送到该 Appender -->
                                    <appender-ref ref="FILE" />
                                </appender>
                                <!-- 主日志文件 Appender 配置,用于将日志写入文件并支持滚动策略 -->
                                <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                    <!-- 指定日志文件的路径,使用前面定义的日志主目录 -->
                                    <file>${LOG_HOME}/application.log</file>
                                    <!-- 编码器配置,将日志事件转换为指定格式的字符串 -->
                                    <encoder>
                                        <!-- 使用前面定义的日志格式模式 -->
                                        <pattern>${LOG_PATTERN}</pattern>
                                    </encoder>
                                    <!-- 滚动策略配置,基于文件大小和时间进行滚动 -->
                                    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                                        <!-- 滚动后的文件命名模式,包含日期和序号 -->
                                        <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                                        <!-- 单个日志文件的最大大小,超过此大小将进行滚动 -->
                                        <maxFileSize>50MB</maxFileSize>
                                        <!-- 保留的历史日志文件的最大天数 -->
                                        <maxHistory>30</maxHistory>
                                        <!-- 所有日志文件的总大小上限 -->
                                        <totalSizeCap>5GB</totalSizeCap>
                                    </rollingPolicy>
                                </appender>
                                <!-- 错误日志异步输出 Appender 配置,将错误日志异步写入文件 -->
                                <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
                                    <!-- 异步队列的大小,即最多可缓存的日志事件数量为 512 -->
                                    <queueSize>512</queueSize>
                                    <!-- 丢弃阈值,设置为 0 表示不丢弃日志事件 -->
                                    <discardingThreshold>0</discardingThreshold>
                                    <!-- 引用名为 ERROR_FILE 的 Appender,将异步处理后的错误日志发送到该 Appender -->
                                    <appender-ref ref="ERROR_FILE" />
                                </appender>
                                <!-- 错误日志文件 Appender 配置,专门用于记录错误日志并支持滚动策略 -->
                                <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                                    <!-- 指定错误日志文件的路径,使用前面定义的日志主目录 -->
                                    <file>${LOG_HOME}/error.log</file>
                                    <!-- 过滤器配置,只允许 ERROR 及以上级别的日志通过 -->
                                    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                                        <!-- 设置过滤级别为 ERROR -->
                                        <level>ERROR</level>
                                    </filter>
                                    <!-- 编码器配置,将日志事件转换为指定格式的字符串 -->
                                    <encoder>
                                        <!-- 使用前面定义的日志格式模式 -->
                                        <pattern>${LOG_PATTERN}</pattern>
                                    </encoder>
                                    <!-- 滚动策略配置,基于文件大小和时间进行滚动 -->
                                    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                                        <!-- 滚动后的文件命名模式,包含日期和序号 -->
                                        <fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                                        <!-- 单个错误日志文件的最大大小,超过此大小将进行滚动 -->
                                        <maxFileSize>50MB</maxFileSize>
                                        <!-- 保留的历史错误日志文件的最大天数 -->
                                        <maxHistory>60</maxHistory>
                                        <!-- 所有错误日志文件的总大小上限 -->
                                        <totalSizeCap>10GB</totalSizeCap>
                                    </rollingPolicy>
                                </appender>
                                <!-- 邮件通知 Appender 配置,当出现错误日志时发送邮件通知 -->
                                <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
                                    <!-- SMTP 服务器地址 -->
                                    <smtpHost>smtp.example.com</smtpHost>
                                    <!-- SMTP 服务器端口 -->
                                    <smtpPort>587</smtpPort>
                                    <!-- 发件人邮箱用户名 -->
                                    <username>user@example.com</username>
                                    <!-- 发件人邮箱密码 -->
                                    <password>password</password>
                                    <!-- 收件人邮箱地址 -->
                                    <to>admin@example.com</to>
                                    <!-- 发件人邮箱地址 -->
                                    <from>noreply@example.com</from>
                                    <!-- 邮件主题,包含应用php名称、日志记录器名称和日志消息 -->
                                    <subject>${appName} - ERROR: %logger{20} - %m</subject>
                                    <!-- 邮件内容布局配置 -->
                                    <layout class="ch.qos.logback.classic.PatternLayout">
                                        <!-- 邮件内容的格式模式,包含日期时间、线程名、日志级别、日志记录器名称、日志消息和异常信息 -->
                                        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%ex</pattern>
                                    </layout>
                                    <!-- 循环缓冲区跟踪器配置,用于缓存一定数量的日志事件 -->
                                    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
                                        <!-- 缓冲区大小,即最多缓存 10 条日志事件 -->
                                        <bufferSize>10</bufferSize>
                                    </cyclicBufferTracker>
                                </appender>
                                <!-- Root Logger 配置,是所有 Logger 的父 Logger,设置全局的日志级别和输出目的地 -->
                                <root level="WARN">
                                    <!-- 将日志异步输出到主日志文件 Appender -->
                                    <appender-ref ref="ASYNC_FILE" />
                                    <!-- 将错误日志异步输出到错误日志文件 Appender -->
                                    <appender-ref ref="ASYNC_ERROR_FILE" />
                                    <!-- 当出现错误日志时,发送邮件通知 -->
                                    <appender-ref ref="EMAIL" />
                                </root>
                            </configuration>

                            到此这篇关于Spring Boot集成Logback终极指南:从基础到高级配置的文章就介绍到这了,更多相关Spring Boot集成Logback配置内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

                            0

                            精彩评论

                            暂无评论...
                            验证码 换一张
                            取 消

                            关注公众号