日志级别
日志级别:ERROR -> WARN -> INFO -> DEBUG 如配置日志级别为INFO,则INFO及以上级别的日志会输出,而比INFO级别低的日志(debug日志)不会被输出。
引入依赖
引入spring-boot-starter,会自动引入spring-boot-starter-logging 此处额外引入lombok(可以使用@Slf4j注解):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
配置文件加载顺序
Logback: 日志加载顺序:logback.xml -> application.properties -> logback-spring.xml 优先加载:logback-spring.xml SpringBoot默认使用logback,默认INFO级别
配置文件
application.yml
logging:
config: classpath:logback-spring.xml
spring:
application:
name: test #自定义应用名称
logback-spring.yml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<contextName>logback-spring-demo</contextName>
<!-- 1.自定义属性-->
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<!-- 1.自定义属性:带颜色输出-->
<property name="pattern-color"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
<!-- 日志存放目录-->
<property name="LOG_HOME" value="logs"/>
<!--日志文件名称:这里spring.application.name表示工程名称-->
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 控制台输出-带颜色 -->
<appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern-color}</pattern>
</encoder>
</appender>
<!--按照每天生成日志文件-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--设置策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件路径:这里%d{yyyyMMdd}表示按天分类日志-->
<FileNamePattern>${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志保留天数-->
<MaxHistory>15</MaxHistory>
<MaxFileSize>200MB</MaxFileSize>
</rollingPolicy>
<!--设置格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!-- 或者使用默认配置 -->
<!--<pattern>${FILE_LOG_PATTERN}</pattern>-->
<charset>utf8</charset>
</encoder>
</appender>
<!--配置启用哪种appender:带颜色控制台输出+日志文件输出-->
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
<appender-ref ref="FILE"/>
</root>
<!-- logger节点可以指定具体包或类的日志配置 -->
<!-- name属性为必选,指定要配置的包或类,level和additivity为可选,有缺省值 -->
<!-- level表示日志级别,这里配置info级别,表示info及以上级别的日志被输出 -->
<!-- additivity表示日志是否传递到上一级,默认为true -->
<logger name="com.suruomo.log.TestComponent" level="info" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE-WITH-COLOR"/>
</logger>
</configuration>
使用
TestComponent.java
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.time.Instant;
/**
* @author suruomo
* @date 2020/7/28 9:22
* @description:
*/
@Slf4j
@Component
public class TestComponent {
public static int STEP_COUNT = 10;
public void processStep() {
Instant start = Instant.now();
log.info("*** TestComponent started ***");
for (int i = 0; i < STEP_COUNT; i++) {
log.info(" Process step {} started.", i);
try {
Thread.sleep(10);
log.debug(" Process step {} detail debug message.", i);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info(" Process step {} completed.", i);
}
Instant end = Instant.now();
log.warn("*** TestComponent completed with {} ***" + Duration.between(start, end));
}
}
TestController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author suruomo
* @date 2020/7/28 9:29
* @description:
*/
@RestController
public class TestController {
@Resource
private TestComponent testComponent;
@GetMapping("/test")
public String test(){
testComponent.processStep();
return "成功";
}
}
测试
输入:127.0.0.1:8070/test 自动输出日志到文件和控制台