Spring Boot整合日志,Swagger

JavaEE进阶 - Spring Boot 日志文件 - 细节狂魔

异常:This application has no explicit mapping for /error, so you are seeing this as a fallback解决方法

Spring Boot 日志文件和单元测试

SpringBoot 日志文件

Spring boot启动后没有生成日志文件问题排错

SpringBoot整合Swagger

Spring Boot整合日志

⽇志有什么⽤?

⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?

答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。

这就跟去医院看病一样,医生听了你的病情描述后,先定位一个方向,然后就让你做一些检查,来进一步确认他的猜想,从而锁定病情。

日志就像医生教你去做的检查,通过 这些 “检查的结果(日志)”来锁定病因(代码异常位置)。

除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

1、记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
假设有一个平台,一天被登录了10万次,登录日志暴增!
正常情况下,可能一天 ,顶多1 万多点。
但是,此时我们发现这一天的登录日志暴增,并且查到有好几个账号,在这一天里登录上万次!这还需要想嘛?肯定有人对着几个账号进行了暴力破解!(盗号)
我们马上就可以对其进行冻结操作,让真正的用户修改密码信息后,才能恢复正常使用。
甚至说:直接拉黑名单。

2、记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
试想一下:当某个人在某个时间段进行了一次错误操作,而操作日志会把这个操作的具体信息给记录下来了(操作人,操作时间,执行的操作,数据改动的前后状态)。
此时,我们就可以根据这个日志,锁定 执行该操作的人(bb 他一顿),让其 对 操作数据 进行 回滚(还原) 操作【根据日志的记录】。

3、记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。’
你可以理解为:日志,记录了每一个方法的执行时间(在一个统一的地方记录)。
就是说:记录每一个方法之前,我们先做一个拦截,每一个方法执行之后,再做一个拦截。
这样我们就能记录每一个方法的执行时间了。
那么,记录方法的执行时间有什么作用呢?
可以方便我们以后 对 程序进行针对性的优化。
公司里面的 主管/经理,每周都会做一件事:按照方法执行时间来对日志进行排序。
将执行时间最长的 前十个方法,挑出来进行优化。
要想进行优化,没有日志,你怎么知道哪些方法的运行时间很长。
更别提对这些方法进行优化,提升执行效率。
提升用户的体验感,等于 “痴人说梦”。

以上这些都是⽇志提供的⾮常实⽤的功能!!!

发现和定位问题,是日志 的 “ 程序属性 ”;记录⽤户登录⽇志,记录系统的操作⽇志,记录程序的执⾏时间,是日志的“业务属性”。
这两种“属性”加一块,才是 日志 的用途(作用)。

在这里插入图片描述

常⻅的⽇志框架说明(了解)

在这里插入图片描述
在这里插入图片描述

项目结构

注意:controller层要和Springboot3Application平级,否则地址栏访问不到
在这里插入图片描述

在这里插入图片描述

UserController

package com.example.springlog.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller
@ResponseBody
public class UserController {

    private final static Logger logger = LoggerFactory.getLogger(UserController.class);

    @RequestMapping("/sayhi")
    public String sayHi() {
        logger.trace("我是trace");
        logger.debug("我是debug");
        logger.info("我是info");
        logger.warn("我是warn");
        logger.error("我是error");
        return "hello springboot3";
    }
}

注意:pom中java版本有17改为1.8,否则报错
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.7.2</version>-->
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example.springlog</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot3</name>
    <description>Demo project for Spring Boot</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.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>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <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>

注意:此设置将trace,debug级别的日志也打印出来,默认只打印info,warn,error级别的
application.properties

logging.level.root = trace

在这里插入图片描述

在控制台输出日志

启动项目,访问地址
http://localhost:8080/sayhi
注意:要访问地址后才会打印我是info这些
在这里插入图片描述
默认打印的日志
在这里插入图片描述
全部打印
在这里插入图片描述
在这里插入图片描述

保存日志/日志持久化

需要先创建好想保存日志的文件夹

application.properties

## logging.level.root = trace
logging.path=C:\\Users\\U100926\\Desktop\\springboot_log\\
路径或者不写转义符号,都可以
logging.path=C:/log/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@slf4j 注解简化输出⽇志

package com.example.springlog.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller
@Slf4j
@ResponseBody
public class UserController {

    //private final static Logger logger = LoggerFactory.getLogger(UserController.class);

    @RequestMapping("/sayhi")
    public String sayHi() {
/*        logger.trace("我是trace");
        logger.debug("我是debug");
        logger.info("我是info");
        logger.warn("我是warn");
        logger.error("我是error");*/

        log.trace("我是trace2");
        log.debug("我是debug2");
        log.info("我是info2");
        log.warn("我是warn2");
        log.error("我是error2");

        return "hello springboot3";
    }
}

访问地址http://localhost:8080/sayhi

效果一样的,不需要定义
private final static Logger logger = LoggerFactory.getLogger(UserController.class);

在这里插入图片描述

在这里插入图片描述

设置日志保存的名称

logging.file = C:/Users/U100926/Desktop/sblog/spring-boot.log
  • 访问浏览器地址
    http://localhost:8080/sayhi

  • 生成指定名字日志文件
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值