• Spring Boot 打印日志文件


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

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

    Spring Boot 日志文件和单元测试

    SpringBoot 日志文件

    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";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    注意:pom中java版本有17改为1.8,否则报错
    pom.xml

    
    <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.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
           
            <version>2.1.5.RELEASEversion>
            <relativePath/> 
        parent>
        <groupId>com.example.springloggroupId>
        <artifactId>demoartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>springboot3name>
        <description>Demo project for Spring Bootdescription>
        <properties>
            <java.version>1.8java.version>
        properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-devtoolsartifactId>
                <scope>runtimescope>
                <optional>trueoptional>
            dependency>
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <optional>trueoptional>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
            <dependency>
                <groupId>org.junit.jupitergroupId>
                <artifactId>junit-jupiterartifactId>
                <version>RELEASEversion>
                <scope>testscope>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombokgroupId>
                                <artifactId>lombokartifactId>
                            exclude>
                        excludes>
                    configuration>
                plugin>
            plugins>
        build>
    
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

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

    logging.level.root = trace
    
    • 1

    在这里插入图片描述

    在控制台输出日志

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

    保存日志/日志持久化

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

    application.properties

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

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

    @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";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

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

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

    在这里插入图片描述

    在这里插入图片描述

    设置日志保存的名称

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

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

  • 相关阅读:
    HarmonyOS系统中内核实现NFC无线通信的方法
    3).基础平台与业务平台的关系
    ant-design 雷达图 radar
    Java定时任务实现
    伦敦银最新均线分析系统怎么操作?
    GPT-3/ChatGPT复现的经验教训
    液晶显示计算器(延时程序)
    Qt 应用程序中自定义鼠标光标
    【leetcode】【剑指offer Ⅱ】058. 日程表
    EG1164大功率同步整流升压模块开源,最高效率97%
  • 原文地址:https://blog.csdn.net/djydjy3333/article/details/126015268