logback-spring.xml配置解析(最新整理)
目录
- 一、全局配置
- 二、变量定义与读取
- 三、Appender 定义(日志输出目的地)
- 四、Logger 定义(日志记录器)
- 五、典型日志使用方式(Java 示例)
- 六:注意项
- 七:完整示例代码
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" defaultandroidValue="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.SizeAndTwww.devze.comimeBasedRollingPolicy"> <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 finalpython 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}/$php{moduleid}_${modulename}_tradeinfo.log</file> <rollingPolicy class="ch.qos.logback.www.devze.comcore.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配置内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论