前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十节:SpringBoot中的日志管理

第十节:SpringBoot中的日志管理

原创
作者头像
入门笔记
发布2022-02-12 13:49:33
5020
发布2022-02-12 13:49:33
举报
文章被收录于专栏:入门小站入门小站

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

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

SpringBoot默认日志格式

image-20211113164713951
image-20211113164713951

格式说明

  • 时间戳,精确到毫秒:2021-11-13 14:35:20.298
  • logback日志级别.日志级别分为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL:INFO
  • 进程ID:1414
  • 分割符:默认是:---
  • 线程名称:[ restartedMain]

案例演示

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

image-20211113175838801
image-20211113175838801
pom.xml配置
代码语言:txt
复制
<?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打印日志
代码语言:txt
复制
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查看控制台

image-20211113180248307
image-20211113180248307

默认情况下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配置

代码语言:txt
复制
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

代码语言:txt
复制
logging.level.root=WARN

启动Lession10Application,看控制台

image-20211114192532072
image-20211114192532072

root是项目所有的日志级别。启动成功了,但是没有啥日志输出。我们把默认的日志级别设置成WARN,按照层级关系INFO,DEBUG,TRACE的日志都不输出。

我们在application.properties将root的日志级别改成INFO,自己的写的业务包日志级别改成DEBUG

代码语言:txt
复制
logging.level.root=INFO //root日志以INFO级别输出信息
logging.level.com.rumenz.lession10.controller.config=WARN //指定config包下的类以WARN级别输出

我们在RumenzConfig配置类中输出了一个INFO级别的日志。

代码语言:txt
复制
@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.controllercom.rumenz.lession10.controller.service设置统一的日志级别。

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

代码语言:txt
复制
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可以配置

代码语言:txt
复制
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-6level %logger- %msg%n
logging.pattern.file

用来指定文件中日志输出的格式。application.properties可以配置

代码语言:txt
复制
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——平台的换行符

本小结源码地址:

介绍

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot默认日志格式
  • 案例演示
    • pom.xml配置
      • 我们在Controller打印日志
      • 将logback日志输出到文件
      • 如何设置日志的级别
        • 批量设置日志级别
        • 日志的其它配置项
          • logging.pattern.console
            • logging.pattern.file
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档