简介
说明
logback是很好的一款日志框架,之前已经介绍过,见:Java日志-logback-介绍与配置 – 自学精灵
本文详细说明logback与SpringBoot如何整合。本文以最方便的整合方式进行实战,而且控制台的输出也是彩色的。
其他网址
SpringBoot-application.yml的日志配置 – 自学精灵
SpringBoot-logback的xml配置文件-用法/示例 – 自学精灵
依赖关系
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) { try { Thread.sleep(5); } catch (InterruptedException e) { throw new RuntimeException(e); } 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: # 会在jar包同路径下生成此日志路径,也可以指定绝对路径。 name: ./log/${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: # 会在jar包同路径下生成此日志路径,也可以指定绝对路径。 name: ./log/${spring.application.name}.log level: root: info logback: rollingpolicy: # 指定最大文件大小,若不指定,则没有限制 max-file-size: 20MB # 这里%i必须要有,否则日志无法生成 file-name-pattern: ${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: log
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: # 会在jar包同路径下生成此日志路径,也可以指定绝对路径。 path: ./log
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
会一直往这天对应的文件里边写日志,不管大小

请先
!