原文网址:SpringBoot--整合logback--使用/教程/实例_IT利刃出鞘的博客-CSDN博客
简介
说明
logback是很好的一款日志框架,之前已经介绍过,见:Java日志--logback--配置/介绍/基础_IT利刃出鞘的博客-CSDN博客
本文详细说明logback与SpringBoot如何整合。本文以最方便的整合方式进行实战,而且控制台的输出也是彩色的。
其他网址
SpringBoot--日志配置--application.yml_IT利刃出鞘的博客-CSDN博客
SpringBoot--logback的xml配置文件--用法/示例_IT利刃出鞘的博客-CSDN博客
依赖关系
SpringBoot默认集成了logback,因此无需专门引入便可进行直接使用。其包的依赖关系如下:
配置文件
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
关于颜色
本文的所有配置在Idea执行都是彩色的,跟原来的输出颜色和格式是一样的。
博主也看过一些没有彩色输出的配置,没有彩色的输出就像看黑白两色的电影一样,真的绝绝子!😂
实际上,完全可以配置成显示颜色的那个输出样式的,可以见本文的最后“多彩输出”。实例
注意
max-size设置的不要太小了,一般要大于10MB。如果设置太小,比如:100B,会导致子文件大小差别很大,而且太小了也没必要分文件了。
公共代码
测试代码
package com.example.demo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class HelloController {
@GetMapping("/test1")
public void test1() {
while (true) {
log.info("进入到死循环");
}
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo_SpringBoot_logback</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo_SpringBoot_logback</name>
<description>demo_SpringBoot_logback</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
方案1:application.yml(最简)
application.yml
spring:
application:
name: demo
logging:
file:
# 如果写:demo.log,则会在jar包同路径下生成此日志文件。
name: D:/logs/${spring.application.name}/${spring.application.name}.log
level:
root: info
测试结果
启动(只会生成demo.log)
Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)
访问:http://localhost:8080/test1
确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.gz
解压(每个文本文件都是11.8MB左右)
查看其内容 (可得:demo.log若大小超过设定的值,会将这个大小的老数据切分出去,demo.log总是最新的,且大小永不会超过某个默认的值)
方案2:application.yml(日期+大小)
简介
优点
- 使用简单。
- 基本满足项目需求。
缺点
不能进行更详细的配置,比如:
- 不能配置将不同的级别的日志输出到不同文件
application.yml
spring:
application:
name: demo
logging:
file:
# 如果写:demo.log,则会在jar包同路径下生成此日志文件。
name: D:/logs/${spring.application.name}/${spring.application.name}.log
max-size: 20MB
level:
root: info
pattern:
rolling-file-name: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log
测试结果
启动(只会生成demo.log)
Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)
访问:http://localhost:8080/test1
确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.log,每个文件大小都是20M左右
查看其内容 (可得:demo.log若大小超过设定的值,会将这个大小的老数据切分出去,demo.log总是最新的,且大小永不会超过设定的值)
方案3:application.yml+xml(日期+大小)
application.yml
spring:
application:
name: demo
logging:
file:
path: logs
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!--<include resource="org/springframework/boot/logging/logback/file-appender.xml" />-->
<springProperty scope="context" name="appName" source="spring.application.name"/>
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<prudent>true</prudent>-->
<file>${LOG_PATH}/${appName}.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>
${LOG_PATH}/%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="logFile"/>
</root>
</configuration>
测试结果
启动(只会生成demo.log)
Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)
访问:http://localhost:8080/test1
确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.log
到文件浏览器下看:(每个文件大小都是20M左右)
方案4:application.yml+xml(只日期)(不推荐)
application.yml
spring:
application:
name: demo
logging:
file:
path: D:/logs
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!--<include resource="org/springframework/boot/logging/logback/file-appender.xml" />-->
<springProperty scope="context" name="appName" source="spring.application.name"/>
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<prudent>true</prudent>-->
<!--<file>${LOG_PATH}/${appName}.log</file>-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${LOG_PATH}/${appName}/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
</FileNamePattern>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="logFile"/>
</root>
</configuration>
测试结果
启动(只会生成${LOG_PATH}/${appName}/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log)
Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)
访问:http://localhost:8080/test1
会一直往这天对应的文件里边写日志,不管大小