写点什么

第十节:SpringBoot 中的日志管理

作者:入门小站
  • 2022 年 2 月 12 日
  • 本文字数:3494 字

    阅读完需:约 11 分钟

第十节:SpringBoot中的日志管理

SpringBoot 默认使用的日志框架是logbackspring-boot-starter中包含了spring-boot-starter-logging模块。该日志框架就是logback。所以我们也不需要单独引入spring-boot-starter-logging模块。


<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-logging</artifactId></dependency>
复制代码

SpringBoot 默认日志格式


格式说明


  • 时间戳,精确到毫秒:2021-11-13 14:35:20.298

  • logback 日志级别.日志级别分为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL:INFO

  • 进程 ID:1414

  • 分割符:默认是:---

  • 线程名称:[ restartedMain]

案例演示

这里我们用到了lombok,使用日志的时候我们可以用@Slf4j注解。


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.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 会把日志打印输出到控制台。

将 logback 日志输出到文件

SpringBoot 默认只会把日志输出到控制台,并不会记录到文件中,生产环境中日志需要记录到文件中存档。如果需要输出到文件可以在application.properties配置文件中设置logging.file.pathlogging.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逐级提供,如果日志设置成INFODEBUGTRACE级别的日志不输出。


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@Configurationpublic class RumenzConfig {
@Bean public User user(){ log.info("这是info级别日志"); return new User(1, "rumenz.com"); }}@Data@AllArgsConstructorclass User{ private Integer id; private String name;
}
复制代码


启动Lession10Application,看控制台发现log.info("这是info级别日志");没有输出。

批量设置日志级别

如果我们想给com.rumenz.lession10.controllercom.rumenz.lession10.controller.service设置统一的日志级别。


application.properties中客户配置,包和包之间用英文逗号分隔


logging.group.rumenz=com.rumenz.lession10.controller,com.rumenz.lession10.controller.servicelogging.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——平台的换行符


本小结源码地址:


  • GitHub:https://github.com/mifunc/springboot/tree/main/lession10

  • Gitee:https://gitee.com/rumenz/springboot/tree/master/lession10

  • https://rumenz.com/rumenbiji/springboot-log.html


介绍


  • 我的博客 https://rumenz.com/ ,

  • 我的工具箱 https://tooltt.com/

  • 微信公众号:【入门小站】



  • 关注【入门小站】回复【1001】获取 linux 常用命令速查手册

  • 关注【入门小站】回复【1003】获取 LeetCode 题解【java 语言实现】

  • 关注【入门小站】回复【1004】获取 Java 基础核心总结

  • 关注【入门小站】回复【1009】获取 阿里巴巴 Java 开发手册

发布于: 刚刚阅读数: 2
用户头像

入门小站

关注

还未添加个人签名 2020.01.18 加入

还未添加个人简介

评论

发布
暂无评论
第十节:SpringBoot中的日志管理