logback-spring.xml配置解析(最新整理)

 更新时间:2025年07月14日 14:44:16   作者:☆池鱼不吃鱼  
logback-spring.xml用于配置Spring Boot项目日志,定义输出格式、路径、级别,支持动态参数读取(如SpringProperty),实现日志隔离与滚动策略(按天+大小),并通过logger继承机制控制日志输出目的地,对logback-spring.xml配置相关知识感兴趣的朋友一起看看吧

logback-spring.xml 文件是 Spring Boot 项目中用于配置日志框架 Logback 的配置文件。它定义了日志的输出格式、输出位置、日志级别等信息。
以下是整个文件的结构化解释:

 一、全局配置

<configuration scan="true" scanPeriod="60 seconds" debug="false">
  • scan="true":启用自动扫描配置文件变化,便于热更新。
  • scanPeriod="60 seconds":每 60 秒检查一次配置是否变更。
  • debug="false":不打印 Logback 内部状态调试信息。

 二、变量定义与读取

1. 从 Spring 上下文中读取配置(如 bootstrap.yml)

<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../logs"/>
<springProperty scope="context" name="logLevelRoot" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="logLevelTrade" source="logging.level.trade" defaultValue="INFO"/>
<springProperty scope="context" name="logLevelSign" source="logging.level.sign" defaultValue="INFO"/>
  • 使用 <springProperty> 可以从 Spring 配置文件中读取值,如:
    • 日志路径:logging.path
    • 日志级别:logging.level.root, logging.level.trade, logging.level.sign
  • 如果未在配置文件中指定,则使用 defaultValue 中的默认值。

2. 自定义常量

<property name="moduleid" value="8176"/>
<property name="modulename" value="IALLO_GATEWAY"/>
  • 定义模块 ID 和名称,供后续日志文件名和格式中引用。

三、Appender 定义(日志输出目的地)

1. 控制台输出:console

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%level][%thread] - [${moduleid}][${modulename}]%m%n</pattern>
    </encoder>
</appender>
  • 输出到控制台。
  • 格式包含时间戳、MDC上下文中的 bizSeqNo、日志级别、线程名、模块信息等。

2. 主日志文件:INFO

<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logPath}/${moduleid}_${modulename}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
		<fileNamePattern>${logPath}/${moduleid}_${modulename}.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
		<maxFileSize>500MB</maxFileSize>
		<MaxHistory>30</MaxHistory>
	</rollingPolicy>
    <encoder>...</encoder>
</appender>
  • 输出到主日志文件,按天和大小滚动(最大 500MB,保留30天)。
  • 文件名示例:GATEWAY.log、GATEWAY.log.2024-04-05-1
  • 主日志 = <root> logger + 它绑定的 appender
  • 名称只是标识符,真正起作用的是引用关系和配置内容
  • 可以通过重命名来实现更清晰的结构,但一定要记得同步更新引用!

3. 自定义日志文件:TRADE_INFO

<appender name="TRADE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    ...
</appender>
  • 专用于记录名为 trade 的 logger 的日志。

四、Logger 定义(日志记录器)

1. 根日志记录器:root

<root level="${logLevelRoot}">
    <appender-ref ref="console"/>
    <appender-ref ref="INFO"/>
</root>
  • 所有未特别指定的日志都走这个配置,除非显式地为某个 logger(如 trade)单独配置了 additivity=false,否则它们的日志也会传递到 root logger,并写入主日志文件。
  • 默认级别为 INFO,输出到控制台和主日志文件。

2. 自定义日志记录器:trade

<logger name="trade" level="${logLevelTrade}" additivity="false">
    <appender-ref ref="TRADE_INFO"/>
</logger>
  • 名为 trade 的 logger,日志只输出到 TRADE_INFO appender。
  • 不再继承 root 的 appender(additivity=false),避免重复输出。

五、典型日志使用方式(Java 示例)

private static final Logger tradeLogger = LoggerFactory.getLogger("trade");
private static final Logger signLogger = LoggerFactory.getLogger("signLog");
tradeLogger.info("这是一个交易日志");
signLogger.warn("这是一个签约警告");
  • 日志隔离:通过 additivity=false 实现不同业务模块日志分离,防止日志重复输出。
  • 动态配置:使用 springProperty 可通过外部配置(如 bootstrap.yml)灵活调整日志路径和级别。
  • 日志归档策略:使用 SizeAndTimeBasedRollingPolicy 实现按天 + 按大小切分日志文件,便于维护。

六:注意项

七:完整示例代码

<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<!-- 通过spring上下文获取对应的配置信息 -->
	<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../logs"/>
	<!-- 获取当前启动应用的日志级别(取自bootstrap.yml/bootstrap.properties文件) -->
	<springProperty scope="context" name="logLevelRoot" source="logging.level.root" defaultValue="INFO"/>
	<!-- 获取当前应用的监控日志级别(取自bootstrap.yml/bootstrap.properties文件) -->
	<springProperty scope="context" name="logLevelTrade" source="logging.level.trade" defaultValue="INFO"/>
	<springProperty scope="context" name="logLevelSign" source="logging.level.sign" defaultValue="INFO"/>
	<!-- 定义日志文件常量 -->
	<property name="moduleid" value="8176"/>
	<property name="modulename" value="IALLO_GATEWAY"/>
	<!-- ConsoleAppender 控制台输出日志 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%level][%thread] - [${moduleid}][${modulename}]%m%n</pattern>
		</encoder>
	</appender>
	<!-- INFO级别日志 appender -->
	<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logPath}/${moduleid}_${modulename}.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${logPath}/${moduleid}_${modulename}.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
			<maxFileSize>500MB</maxFileSize>
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%thread][%level][${modulename}]%m%n</pattern>
		</encoder>
	</appender>
	<!-- INFO级别日志 appender -->
	<appender name="TRADE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logPath}/${moduleid}_${modulename}_tradeinfo.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${logPath}/${moduleid}_${modulename}_tradeinfo.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
			<maxFileSize>500MB</maxFileSize>
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%level][%thread][${moduleid}][${modulename}]%m%n</pattern>
		</encoder>
	</appender>
	<!-- INFO级别日志 appender -->
	<appender name="SIGN_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logPath}/${moduleid}_${modulename}_signinfo.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${logPath}/${moduleid}_${modulename}_signinfo.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
			<maxFileSize>500MB</maxFileSize>
			<MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%level][%thread][${moduleid}][${modulename}]%m%n</pattern>
		</encoder>
	</appender>
	<!-- root级别 INFO -->
	<root level="${logLevelRoot}">
		<appender-ref ref="console"/>
		<appender-ref ref="INFO"/>
	</root>
	<!-- 日志监控 -->
	<logger name="trade" level="${logLevelTrade}" additivity="false">
		<appender-ref ref="TRADE_INFO"/>
	</logger>
	<logger name="signLog" level="${logLevelSign}" additivity="false">
		<appender-ref ref="SIGN_INFO"/>
	</logger>
</configuration>

到此这篇关于logback-spring.xml配置解析(最新整理)的文章就介绍到这了,更多相关logback-spring.xml配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决springboot的aop切面不起作用问题(失效的排查)

    解决springboot的aop切面不起作用问题(失效的排查)

    这篇文章主要介绍了解决springboot的aop切面不起作用问题(失效的排查),具有很好的参考价值,希望对大家有所帮助。 一起跟随小编过来看看吧
    2020-04-04
  • idea使用pagehelper实现后端分页功能的步骤详解

    idea使用pagehelper实现后端分页功能的步骤详解

    这篇文章主要介绍了idea使用pagehelper实现后端分页功能的步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot对接小程序微信支付的实现

    SpringBoot对接小程序微信支付的实现

    本文主要介绍了SpringBoot对接小程序微信支付的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-09-09
  • Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    这篇文章主要介绍了Spring Cloud 整合Apache-SkyWalking链路跟踪的示例代码,代码简单易懂,通过图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Spring MVC的参数绑定和返回值问题

    Spring MVC的参数绑定和返回值问题

    这篇文章主要介绍了Spring MVC的参数绑定和返回值问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Spring bean生命周期配置过程解析

    Spring bean生命周期配置过程解析

    这篇文章主要介绍了Spring bean生命周期配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • spring @Scheduled定时任务注解使用方法及注意事项小结

    spring @Scheduled定时任务注解使用方法及注意事项小结

    Spring的@Scheduled注解用于定时任务调度,默认单线程依次执行,可以通过配置多线程调度器或使用@Async注解实现并行执行,常见参数包括cron、fixedRate、fixedDelay、initialDelay等,本文介绍spring @Scheduled定时任务注解使用方法,感兴趣的朋友一起看看吧
    2025-02-02
  • 在Java中实现线程安全的单例模式的常见方式

    在Java中实现线程安全的单例模式的常见方式

    单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点,在多线程环境下,确保单例模式的线程安全性是非常重要的,因为多个线程可能会同时尝试创建实例,导致实例不唯一的问题,本文介绍了在Java中实现线程安全的单例模式有几种常见的方式
    2024-09-09
  • 聊聊SpringBoot的@Scheduled的并发问题

    聊聊SpringBoot的@Scheduled的并发问题

    这篇文章主要介绍了聊聊SpringBoot的@Scheduled的并发问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • druid配置数据库连接使用密文密码方式

    druid配置数据库连接使用密文密码方式

    这篇文章主要介绍了druid配置数据库连接使用密文密码方式,具有很好的参考价值,希望对大家有所帮助,
    2023-12-12

最新评论