1. Logback配置文件规则
日志服务一般都在ApplicationContext
创建前就初始化了,所以日志配置可以独立于Spring
的配置。我们也可以通过系统属性和传统的Spring Boot
外部配置文件,实现日志控制和管理。
根据不同的日志系统,Spring Boot
按如下“约定规则” 组织配置文件名加载日志配置文件,参见下表:
Logging System |
Customization |
Logback |
logback-spring.xml , logback-spring.groovy , logback.xml or logback.groovy |
Log4j2 |
log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) |
logging.properties |
Spring Boot
官方推荐优先使用带有-spring
的文件名作为你的日志配置,如使用logback-spring.xml
,而不是logback.xml
。
logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能,根据不同的开发环境设置不同的日志配置。
2. Logback读取配置或属性文件的步骤是
- 步骤一:
Logback
在类路径下尝试查找logback.groovy
的文件。
- 步骤二: 如果没有找到
logback.groovy
文件,就在类路径下查找logback-test.xml
文件。
- 步骤三: 若也没有找到
logback-test.xml
文件,就会在类路径下查找logback.xml
文件。
我们也可以自定义logback.xml
名称,然后在application.properties
中指定它,如下配置:
logging.config=classpath:log-config.xml
|
3. logback-spring.xml 详情
3.1 同步日志配置
配置文件位置: src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds">
<property name="LOG_NAME" value="log_demo" /> <property name="LOG_MAX_DAY_HISTORY" value="30" />
<property name="LOG_FILE_MAX_SIZE" value="2KB" /> <property name="LOG_TOTAL_SIZE_CAP" value="1GB" />
<property name="LOG_PATTERN" value="%date %-5level --- [%thread] %class.%method/%line : %msg%n"/> <property name="LOG_PATTERN_COLOURS" value="%date %green(%-5level) --- [%thread] %cyan(%class.%method/%line) : %msg%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN_COLOURS}</pattern> <charset>UTF-8</charset> </encoder> </appender>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/${LOG_NAME}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/${LOG_NAME}_%d{yyyy-MM-dd}_%i.zip</fileNamePattern> <maxFileSize>${LOG_FILE_MAX_SIZE}</maxFileSize> <maxHistory>${LOG_MAX_DAY_HISTORY}</maxHistory> <totalSizeCap>${LOG_TOTAL_SIZE_CAP}</totalSizeCap> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="ROLLING"/> </root> </configuration>
|
3.2 异步日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds">
<springProperty scope="context" name="logPath" source="logging.file.path"/> <property name="LOG_NAME" value="log_demo_async" /> <property name="LOG_MAX_DAY_HISTORY" value="30" /> <property name="LOG_FILE_MAX_SIZE" value="50KB" /> <property name="LOG_TOTAL_SIZE_CAP" value="1GB" />
<property name="LOG_PATTERN" value="%date %-5level --- [%thread] %class.%method/%line : %msg%n"/> <property name="LOG_PATTERN_COLOURS" value="%date %green(%-5level) --- [%thread] %cyan(%class.%method/%line) : %msg%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN_COLOURS}</pattern> <charset>UTF-8</charset> </encoder> </appender>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${logPath}/${LOG_NAME}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/${LOG_NAME}_%d{yyyy-MM-dd}_%i.zip</fileNamePattern> <maxFileSize>${LOG_FILE_MAX_SIZE}</maxFileSize> <maxHistory>${LOG_MAX_DAY_HISTORY}</maxHistory> <totalSizeCap>${LOG_TOTAL_SIZE_CAP}</totalSizeCap> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender>
<appender name="ASYNC-ROLLING" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>256</queueSize> <appender-ref ref="ROLLING"/> </appender>
<root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="ASYNC-ROLLING"/> </root> </configuration>
|
为了看到效果,讲日志单文件最大值设置为2KB
,以下是测试代码和运行效果图
新建Controller
文件: src/main/java/com/hui/logdemo/controller/LogController.java
package com.hui.logdemo.controller;
import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
@RestController @Slf4j public class LogController { @RequestMapping("/log") public String test(){ String text = "日志内容~~~"; String join = String.join("", Collections.nCopies(40, text)); log.trace("这是 trace 类型日志... {}",join); log.debug("这是 debug 类型日志... {}",join); log.info("这是 info 类型日志... {}",join); log.warn("这是 warn 类型日志... {}",join); log.error("这是 error 类型日志... {}",join); return "日志测试使用"; } }
|
访问几次后效果图如下:
4. 配置显示颜色
Logback 本身是支持彩色显示的,支持的颜色如下:
%black() %red() %green() %yellow() %blue() %magenta() %cyan() %white() %gray() %boldRed() %boldGreen() %boldYellow() %boldBlue() %boldMagenta() %boldCyan() %boldWhite() %highlight()
|
使用方式:
<!-- 彩色日志格式 --> <property name="LOG_PATTERN_COLOURS" value="%date %green(%-5level) --- [%thread] %cyan(%class.%method/%line) : %msg%n"/>
|