logback-spring.xml 完整生产模板

 更新时间:2026年07月06日 09:50:44   作者:Full Stack Developme  
本文提供了一个生产级logback-spring.xml完整配置模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

这是一个可直接用于生产环境的 logback-spring.xml 完整模板。

它涵盖了日志滚动策略、多环境配置、JSON结构化输出(ELK兼容)、敏感信息脱敏、性能优化等核心要素。

完整模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--
        生产级 Logback 配置模板
        特性:
        1. 多环境隔离(dev/test/prod)
        2. 日志滚动策略(按大小和时间)
        3. JSON 格式输出(ELK 友好)
        4. 敏感信息脱敏(手机号、身份证、密码等)
        5. 异步日志(提升性能)
        6. 错误日志单独输出
    -->
    <!-- ==================== 1. 自定义属性 ==================== -->
    <!-- 日志存放路径 -->
    <property name="LOG_PATH" value="/var/log/your-app" />
    <!-- 应用名称(用于区分不同服务) -->
    <property name="APP_NAME" value="your-service" />
    <!-- 日志保留天数 -->
    <property name="MAX_HISTORY" value="30" />
    <!-- 单文件最大大小 -->
    <property name="MAX_FILE_SIZE" value="500MB" />
    <!-- 总磁盘空间限制 -->
    <property name="TOTAL_SIZE_CAP" value="20GB" />
    <!-- 控制台日志格式(开发环境友好,带颜色) -->
    <property name="CONSOLE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger{36}) - %msg%n" />
    <!-- 文件日志格式(普通文本) -->
    <property name="FILE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n" />
    <!-- ==================== 2. 敏感信息脱敏转换器 ==================== -->
    <!-- 定义脱敏规则,替换日志中的敏感字段 -->
    <conversionRule conversionWord="mask"
                    converterClass="com.yourpackage.MaskConverter" />
    <!--
        如果没有自定义 Converter,可以使用内置的 replace 函数:
        例如将手机号替换为 138****1234,详见下面 appender 中的用法
    -->
    <!-- ==================== 3. 日志 Appender 定义 ==================== -->
    <!-- 3.1 控制台输出(仅开发环境启用,生产环境建议关闭) -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 3.2 常规文件日志(按天滚动,带大小分割) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APP_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动文件命名:日期 + 序号 -->
            <fileNamePattern>${LOG_PATH}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单文件最大大小,达到后触发滚动 -->
            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            <!-- 保留天数 -->
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <!-- 磁盘总容量限制 -->
            <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 生产环境推荐立即刷新(保证数据完整性),性能要求极高时可改为 false -->
        <immediateFlush>true</immediateFlush>
    </appender>
    <!-- 3.3 错误日志单独输出(只记录 ERROR 级别) -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APP_NAME}-error.log</file>
        <!-- 只记录 ERROR 级别 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <immediateFlush>true</immediateFlush>
    </appender>
    <!-- 3.4 JSON 格式 Appender(用于对接 ELK / 日志中心) -->
    <appender name="JSON_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APP_NAME}-json.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APP_NAME}-json.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
        </rollingPolicy>
        <!-- 使用 Logstash 编码器输出 JSON -->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- 应用名称 -->
            <customFields>{"app_name":"${APP_NAME}","env":"${SPRING_PROFILES_ACTIVE:-unknown}"}</customFields>
            <!-- 包含 MDC 上下文 -->
            <includeMdc>true</includeMdc>
            <!-- 不包含调用者位置信息(提升性能) -->
            <includeCallerData>false</includeCallerData>
        </encoder>
    </appender>
    <!-- 3.5 异步 Appender(包装同步 Appender,提升性能) -->
    <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 丢失日志时丢弃 DEBUG/TRACE,保留 INFO 及以上 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 队列大小,默认 256,生产环境建议 512~1024 -->
        <queueSize>512</queueSize>
        <!-- 如果队列满,是否阻塞主线程(false = 丢弃日志,避免影响业务) -->
        <neverBlock>true</neverBlock>
        <!-- 引用的同步 Appender -->
        <appender-ref ref="FILE" />
        <!-- 如果需要 JSON 也异步,再追加一行 -->
        <!-- <appender-ref ref="JSON_FILE" /> -->
    </appender>
    <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="ERROR_FILE" />
    </appender>
    <!-- ==================== 4. 第三方库日志级别控制 ==================== -->
    <!-- 避免第三方框架输出过多无用日志 -->
    <logger name="org.springframework" level="INFO" />
    <logger name="org.springframework.web" level="INFO" />
    <logger name="org.springframework.boot" level="INFO" />
    <logger name="org.apache" level="WARN" />
    <logger name="org.hibernate" level="WARN" />
    <logger name="com.netflix" level="WARN" />
    <logger name="org.apache.kafka" level="WARN" />
    <logger name="io.netty" level="WARN" />
    <!-- 业务包路径,可调整到 DEBUG(需配合环境) -->
    <logger name="com.yourpackage" level="INFO" />
    <!-- ==================== 5. Spring Profile 多环境配置 ==================== -->
    <!-- 开发环境:输出控制台 + 文件,级别 DEBUG -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ASYNC_FILE" />
            <appender-ref ref="ASYNC_ERROR" />
        </root>
    </springProfile>
    <!-- 测试环境:输出文件 + JSON,级别 INFO -->
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="ASYNC_FILE" />
            <appender-ref ref="ASYNC_ERROR" />
            <appender-ref ref="JSON_FILE" />
        </root>
    </springProfile>
    <!-- 生产环境:只输出文件 + JSON(关闭控制台),级别 INFO -->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="ASYNC_FILE" />
            <appender-ref ref="ASYNC_ERROR" />
            <appender-ref ref="JSON_FILE" />
        </root>
    </springProfile>
    <!-- 默认配置(无 profile 时生效) -->
    <springProfile name="default">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ASYNC_FILE" />
            <appender-ref ref="ASYNC_ERROR" />
        </root>
    </springProfile>
</configuration>

依赖引入(Maven)

确保 pom.xml 中包含以下依赖:

<!-- Spring Boot 默认已包含 Logback + SLF4J,只需添加以下增强包 -->

<!-- JSON 格式编码器(用于 ELK) -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.4</version>  <!-- 使用最新稳定版 -->
</dependency>

<!-- 如果需要自定义脱敏 Converter,需引入工具类 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

关键配置说明

配置项作用生产建议
scan="true" scanPeriod="60 seconds"动态检测配置文件变更,无需重启建议开启,但 debug="false" 避免日志泛滥
SizeAndTimeBasedRollingPolicy同时按时间和大小滚动防止单文件过大导致磁盘爆满
AsyncAppender异步写日志,不阻塞主线程强烈推荐,neverBlock=true 防止业务夯住
LogstashEncoder输出 JSON 格式对接 ELK 时必须,支持 customFields 注入元数据
<springProfile>多环境隔离开发环境输出控制台,生产环境关闭
immediateFlush=true每次写入立即刷新生产环境建议 true(可靠性优先),压测可调 false

自定义脱敏 Converter(可选)

如果你需要精确脱敏(如手机号、身份证),创建以下类:

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class MaskConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        String msg = event.getFormattedMessage();
        // 手机号脱敏:13812345678 → 138****5678
        msg = msg.replaceAll("(1\\d{2})\\d{4}(\\d{4})", "$1****$2");
        // 身份证脱敏
        msg = msg.replaceAll("(\\d{6})\\d{8}(\\d{4})", "$1********$2");
        // 密码脱敏
        msg = msg.replaceAll("(?i)(password|pwd|passwd)[\\s]*[=:][\\s]*\\S+", "$1=******");
        return msg;
    }
}

然后在模板顶部使用 <conversionRule> 注册,并在 pattern 中通过 %mask 引用。

避坑提醒

  • 日志路径权限:确保 ${LOG_PATH} 目录存在且应用有读写权限,否则启动失败。
  • 磁盘监控:务必对日志目录配置磁盘告警(如 80% 触发预警),防止日志打满磁盘。
  • 异步队列监控:AsyncAppender 队列满时若 neverBlock=true 会丢弃日志,需配合监控发现。
  • 不要同时使用 CONSOLE + FILE 同步模式:生产环境关闭 CONSOLE,否则磁盘 IO 翻倍。

到此这篇关于logback-spring.xml 完整生产模板的文章就介绍到这了,更多相关logback-spring.xml生产模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC中事务是否可以加在Controller层的问题

    SpringMVC中事务是否可以加在Controller层的问题

    这篇文章主要介绍了SpringMVC中事务是否可以加在Controller层的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java使用poi包读取Excel文档代码分享

    Java使用poi包读取Excel文档代码分享

    这篇文章主要介绍了Java使用poi包读取Excel文档代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 给@Value设置默认值以及为static变量赋值问题

    给@Value设置默认值以及为static变量赋值问题

    在Spring框架中,@Value注解用于属性注入,可将配置文件中的值赋给变量,未指定默认值时,若配置文件缺少相应属性,程序启动会报错,可通过设定默认值防止此问题,对于静态变量,由于@Value无法直接注入,需通过Set方法赋值,该方法也支持默认值设置
    2024-09-09
  • IDEA如何隐藏无关文件

    IDEA如何隐藏无关文件

    掌握IDEA隐藏文件的终极技巧!学会快速过滤.git、node_modules等冗余文件,清理项目树混乱,提升编程效率,点击查看完整配置方案和常见问题解决,让你的IDE更清爽高效
    2026-07-07
  • Spring扩展之基于HandlerMapping实现接口灰度发布实例

    Spring扩展之基于HandlerMapping实现接口灰度发布实例

    这篇文章主要介绍了Spring扩展之基于HandlerMapping实现接口灰度发布实例,灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,需要的朋友可以参考下
    2023-08-08
  • Springboot的jdk安装与配置教程

    Springboot的jdk安装与配置教程

    本文介绍了在Windows、macOS和Linux系统上下载和配置JDK(Java Development Kit)的步骤,它涵盖了从下载JDK、选择合适的安装路径、配置环境变量到验证安装的全过程,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • springboot多模块多环境配置文件问题(动态配置生产和开发环境)

    springboot多模块多环境配置文件问题(动态配置生产和开发环境)

    这篇文章主要介绍了springboot多模块多环境配置文件问题(动态配置生产和开发环境),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Spring容器注册组件实现过程解析

    Spring容器注册组件实现过程解析

    这篇文章主要介绍了Spring容器注册组件实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringMVC执行过程详细讲解

    SpringMVC执行过程详细讲解

    MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序
    2022-08-08
  • Spring MVC 拦截器实现登录

    Spring MVC 拦截器实现登录

    这篇文章主要介绍了Spring MVC 拦截器实现登录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论