SpringBoot默认使用的日志框架是
logback
。spring-boot-starter
中包含了spring-boot-starter-logging
模块。该日志框架就是logback
。所以我们也不需要单独引入spring-boot-starter-logging
模块。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
格式说明
2021-11-13 14:35:20.298
INFO
1414
---
[ restartedMain]
这里我们用到了
lombok
,使用日志的时候我们可以用@Slf4j
注解。
<?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.5.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.rumenz</groupId> <artifactId>lession10</artifactId> <version>0.0.1-SNAPSHOT</version> <name>lession10</name> <description>第十节:SpringBoot中的日志管理</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.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Controller
打印日志package com.rumenz.lession10.controller; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @className: RumenzController * @description: TODO 类描述 * @author: 入门小站 rumenz.com * @date: 2021/11/11 **/ @Slf4j //lombok 提供的注解 @RestController @RequestMapping("/rumenz") public class RumenzController { //如果不使用lombok就需要用以下代码获取日志操作对象 //Logger log = LoggerFactory.getLogger(RumenzController.class); @GetMapping("/index") public String index(){ log.trace("Trace 日志..."); log.debug("Debug 日志..."); log.info("Info 日志..."); log.warn("Warn 日志..."); log.error("Error 日志..."); return "入门小站"; } }
启动
Lession10Application
,浏览器访问http://127.0.0.1:8080/rumenz/index
查看控制台
默认情况下logback会把日志打印输出到控制台。
SpringBoot默认只会把日志输出到控制台,并不会记录到文件中,生产环境中日志需要记录到文件中存档。如果需要输出到文件可以在
application.properties
配置文件中设置logging.file.path
或logging.file.name
logging.file.path
(低版本是logging.path)设置日志的存储路径,会在设置的目录下生成spring.log日志文件。logging.file.name
(低版本是logging.name)设置日志文件路径及日志文件名,可以是绝对路径也可以是相对路径。两者不能同时使用,若同时配置,只有
logging.file.name
生效。默认情况下,日志大小到10M时间会被截断,生成新的日志文件。
application.properties
配置
logging.file.name=rumenz.log
启动
Lession10Application
,浏览器访问http://127.0.0.1:8080/rumenz/index
查看当前目录下的rumenz.log
会发现里面有日志内容。当然控制台也会输出。
日志级别总共有
TRACE<DEBUG<INFO<WARN<ERROR<FATAL
逐级提供,如果日志设置成INFO
则DEBUG
和TRACE
级别的日志不输出。
SpringBoot默认的日志级别是
INFO
,我们将SpringBoot的默认日志级别改成WARN
application.properties
logging.level.root=WARN
启动
Lession10Application
,看控制台
root是项目所有的日志级别。启动成功了,但是没有啥日志输出。我们把默认的日志级别设置成
WARN
,按照层级关系INFO
,DEBUG
,TRACE
的日志都不输出。
我们在
application.properties
将root的日志级别改成INFO
,自己的写的业务包日志级别改成DEBUG
logging.level.root=INFO //root日志以INFO级别输出信息 logging.level.com.rumenz.lession10.controller.config=WARN //指定config包下的类以WARN级别输出
我们在
RumenzConfig
配置类中输出了一个INFO
级别的日志。
@Slf4j @Configuration public class RumenzConfig { @Bean public User user(){ log.info("这是info级别日志"); return new User(1, "rumenz.com"); } } @Data @AllArgsConstructor class User{ private Integer id; private String name; }
启动
Lession10Application
,看控制台发现log.info("这是info级别日志");
没有输出。
如果我们想给
com.rumenz.lession10.controller
和com.rumenz.lession10.controller.service
设置统一的日志级别。
application.properties
中客户配置,包和包之间用英文逗号分隔
logging.group.rumenz=com.rumenz.lession10.controller,com.rumenz.lession10.controller.service logging.level.rumenz=INFO
logging.config
日志配置;logging.logback.rollingpolicy.max-file-size
(低版本用logging.file.max-size
)最大日志文件大小;logging.logback.rollingpolicy.max-history
(低版本logging.file.max-history
)最大归档文件数量;logging.pattern.console
控制台输出的日志模式;logging.pattern.dateformat
日志的日期格式;logging.pattern.file
默认使用日志模式logging.pattern.level
日志级别logging.pattern.console
用来指定控制台日志输出的格式。
application.properties
可以配置
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-6level %logger- %msg%n
logging.pattern.file
用来指定文件中日志输出的格式。
application.properties
可以配置
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-6level %logger- %msg%n
上面各个符号参数的含义
%d{yyyy-MM-dd HH:mm:ss}
——日志输出时间%thread
——输出日志的进程名字,这在Web应用以及异步任务处理中很有用%-6level
——日志级别,并且使用5个字符靠左对齐%logger
- ——日志输出者的名字%msg
——日志消息%n
——平台的换行符本小结源码地址:
介绍