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配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实战之小蜜蜂扩音器网上商城系统的实现

    Java实战之小蜜蜂扩音器网上商城系统的实现

    这篇文章主要介绍了如何利用Java实现简单的小蜜蜂扩音器网上商城系统,文中采用到的技术有JSP、Servlet 、JDBC、Ajax等,感兴趣的可以动手试一试
    2022-03-03
  • Java使用CountDownLatch实现统计任务耗时

    Java使用CountDownLatch实现统计任务耗时

    这篇文章主要为大家详细介绍了Java如何使用CountDownLatch实现统计任务耗时的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Spring Boot假死诊断实战记录

    Spring Boot假死诊断实战记录

    这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • java如何使用zip压缩实现读取写入

    java如何使用zip压缩实现读取写入

    这篇文章主要为大家介绍了java如何使用zip压缩实现读取写入示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 浅谈Java 继承接口同名函数问题

    浅谈Java 继承接口同名函数问题

    这篇文章主要介绍了浅谈Java 继承接口同名函数问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java 中自定义OutputFormat的实例详解

    java 中自定义OutputFormat的实例详解

    这篇文章主要介绍了java 中 自定义OutputFormat的实例详解的相关资料,这里提供实例帮助大家学习理解这部分内容,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • Java字符串数字左右补全0的四种方式

    Java字符串数字左右补全0的四种方式

    这篇文章主要给大家介绍了关于Java字符串数字左右补全0的四种方式,在编程中有时候我们需要对一个字符串进行字符填充,以满足某些特定的要求,其中补全0是一种常见的需求,需要的朋友可以参考下
    2023-08-08
  • maven子模块相互依赖打包时报错找不到类的解决方案

    maven子模块相互依赖打包时报错找不到类的解决方案

    本文主要介绍了maven子模块相互依赖打包时报错找不到类的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 基于Java Tomcat和激活MyEclips的深入理解

    基于Java Tomcat和激活MyEclips的深入理解

    本篇文章是对Java中的Tomcat和激活MyEclips进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • java 获取已知文件扩展名的代码

    java 获取已知文件扩展名的代码

    java 编写程序获取已知文件的扩展名. 注意: abc.txt的扩展名是txt, abc.java.txt的扩展名也是txt.,需要的朋友可以参考下
    2017-02-02

最新评论