关于springboot:第十节SpringBoot中的日志管理

2次阅读

共计 5235 个字符,预计需要花费 14 分钟才能阅读完成。

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
@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中客户配置, 包和包之间用英文逗号分隔

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——平台的换行符

本小结源码地址:

  • GitHub:https://github.com/mifunc/spr…
  • Gitee:https://gitee.com/rumenz/spri…
  • https://rumenz.com/rumenbiji/…

介绍

  • 我的博客 https://rumenz.com/ ,
  • 我的工具箱 https://tooltt.com/
  • 微信公众号:【入门小站】

  • 关注【入门小站】回复【1001】获取 linux 常用命令速查手册
  • 关注【入门小站】回复【1003】获取 LeetCode 题解【java 语言实现】
  • 关注【入门小站】回复【1004】获取 Java 根底外围总结
  • 关注【入门小站】回复【1009】获取 阿里巴巴 Java 开发手册
正文完
 0