本文主要是介绍Spring Boot集成Logback终极指南之从基础到高级配置实战指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍...
一、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-starter
或spring-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.chinasem.cn <!-- 定义logger --> <logger name="com.example.demo" level="DEBUG" /> <!-- 根logger配置 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration>
三、核心组件深度解析
3.1 <configuration> 元素
<configuration>
是Logback配置文件的根元素,支持以下重要属性:
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
scan | boolean | false | 是否监视配置文件变化 |
scanPeriod | 时间间隔 | 1分钟 | 检查配置文件变化的时间间隔 |
debug | boolean | false | 是否打印Logback内部调试信息 |
packagingData | boolean | false | 是否包含调用者信息(影响性能) |
示例:
<configuration scan="true" scanPeriod="30 seconds" debug="false"> <!-- 配置内容 --> </configuration>
最佳实践:
- 开发环境可以开启
scan
以便动态调整配置 - 生产环境应关闭
scan
和debug
以避免性能开销 - 仅在需要诊断问题时开启
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.outwithJansi
: 是否启用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
输出日志到单个文件
特有属性:
示例:
<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类型 | 类名 | 用途 |
---|---|---|
SMTPAppender | ch.qos.logback.classic.net.SMTPAppender | 通过邮件发送错误日志 |
DBAppender | ch.qos.logback.classic.db.DBAppender | 存储日志到数据库 |
SocketAppender | ch.qos.logback.classic.net.SocketAppender | 通过网络socket发送日志 |
SyslogAppender | ch.qos.logback.classic.net.SyslogAppender | 发送日志到syslog服务器 |
3.5 <encoder> 元素
Encoder负责将日志事件转换为字节数组并写入输出流。
3.5.1 PatternLayoutEncoder
最常用的Encoder实现,支持丰富的模式表达式:
<encoder class="ch.qos.loChina编程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 | 日志级别 |
%logger | Logger名称 |
%msg | 日志消息 |
%n | 换行符 |
%caller | 调用者信息 |
%mdc | MDC内容 |
%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:日志文件太大
- 调整
maxFileSize
和maxHistory
- 使用
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配置内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Spring Boot集成Logback终极指南之从基础到高级配置实战指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!