• 【Spring Boot】日志文件


    一. 日志文件有什么用

    • 最主要的⽤途就是排除和定位问题。除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:
    • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
    • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
    • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

    二. 日志怎么用

    Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:

    在这里插入图片描述

    通过上述⽇志信息我们能发现以下 3 个问题:

    • Spring Boot 内置了⽇志框架(不然也输出不了⽇志)。
    • 默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打印⽇志呢?
    • ⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?

    三. ⾃定义⽇志打印

    开发者⾃定义打印⽇志的实现步骤:

    • 在程序中得到⽇志对象。
    • 使⽤⽇志对象的相关语法输出要打印的内容。

    1. 在程序中得到⽇志对象

    在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory

        // 1.得到⽇志对象
        private static Logger logger = LoggerFactory.getLogger(UserController.class); 
    
    • 1
    • 2

    注意:

    • ⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类。
    • Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。

    因为 Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志。

    常⻅的⽇志框架:

    在这里插入图片描述

    2. 使⽤⽇志对象打印⽇志

    ⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示:

            // 2.使⽤⽇志打印⽇志
            logger.info("--------------要输出⽇志的内容----------------");
    
    • 1
    • 2

    3. ⽇志格式说明

    在这里插入图片描述

    四. 日志级别

    1. ⽇志级别有什么⽤

    • ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
    • ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。

    2. ⽇志级别的分类与使⽤

    • trace:微量,少许的意思,级别最低;
    • debug:需要调试时候的关键信息打印;
    • info:普通的打印信息(默认⽇志级别);
    • warn:警告,不影响使⽤,但需要注意的问题;
    • error:错误信息,级别较⾼的错误⽇志信息;
    • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

    在这里插入图片描述

    级别越高接收到的消息就越少,只能收到高于或者等于该级别的日志。如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了。

    ⽇志级别设置:

    ⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:

    logging:
      level:
        root: error # 配置根路径的(全局)⽇志级别
    
    • 1
    • 2
    • 3
    logging:
      level:
        com:
          example:
            controller: trace  # 局部日志设置,位置从 java 包开始,且一般精准到包,不会精准到类,若同时出现全局和局部,则以局部为准
    
    • 1
    • 2
    • 3
    • 4
    • 5

    进行日志输出

    @RestController
    @RequestMapping("/user")
    public class UserController {
        // 1.得到⽇志对象
        private static Logger logger =
                LoggerFactory.getLogger(UserController.class);
        @Value("${server.port}")
        private String port;
        @Value("${spring.datasource.url}")
        private String url;
        @RequestMapping("/sayhi")
        public String sayHi() {
            // 2.使⽤⽇志打印⽇志
            logger.trace("================= trace ===============");
            logger.debug("================= debug ===============");
            logger.info("================= info ===============");
            logger.warn("================= warn ===============");
            logger.error("================= error ===============");
            return "Hi," + url;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ⽇志的输出级别,默认是 info.

    五. 日志持久化

    以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化。

    想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。

    配置⽇志⽂件的保存路径:

    logging:
      file:
        path: D:\\DevelopTool\\JAVA  #自动创建目录
    
    • 1
    • 2
    • 3

    配置⽇志⽂件的⽂件名:

    logging:
      file:
        name: D:\\DevelopTool\\JAVA\\spring-1004.log   # 文件存在则会续写,不会覆盖 默认每个文件大小为 10MB, 大于 10MB 则分为多个文件,可以自己设置
    
    • 1
    • 2
    • 3

    存储结果:

    在这里插入图片描述

    六. 更简单的⽇志输出—lombok

    每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,使⽤ lombok 来更简单的输出。

    1. 添加 lombok 框架⽀持。
    2. 使⽤ @slf4j 注解输出⽇志。

    1. 添加 lombok 依赖

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.20</version>
                <optional>true</optional>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 输出⽇志

    @RestController
    @RequestMapping("/p")
    @Slf4j
    public class PersonController {
        @RequestMapping("/log")
        public void loggerTest() {
            log.error("------------------- error -----------------");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名。

    3. lombok 原理

    lombok 能够打印⽇志的原理就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如下:

    在这里插入图片描述
    可以发现 lombok 其实只是方便了我们编写,并不会有什么性能的提升,它的原理就是在编译前将注解替换为对应的代码。

    Java 程序的运⾏原理:

    在这里插入图片描述

    Lombok 的作⽤如下图所示:

    在这里插入图片描述

    2. lombok 更多注解说明

    基本注解

    注解作⽤
    @Getter⾃动添加 getter ⽅法
    @Setter⾃动添加 setter ⽅法
    @ToString⾃动添加 toString ⽅法
    @EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法
    @NoArgsConstructor⾃动添加⽆参构造⽅法
    @AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
    @NonNull属性不能为 null
    @RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需

    组合注解

    注解作⽤
    @Data@Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor

    ⽇志注解

    注解作⽤
    @Slf4j添加⼀个名为 log 的⽇志,使⽤ slf4j

    好啦! 以上就是 SpringBoot ⽇志⽂件 的讲解,希望能帮到你 !
    评论区欢迎指正 !

  • 相关阅读:
    【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?
    C/C++教程 从入门到精通《第十三章》—— 制作U盘小偷
    超全的Python完全版电子书——从基础到爬虫、分析等高级应用,限时下载
    软件测试面试丨关于JMeter的问题,看这篇就够了
    postgresql|数据库|数据迁移神器ora2pg的安装部署和初步使用
    猿创征文 | [云原生]为微服务保驾护航之链路跟踪skywalking保姆级搭建教程
    72:第六章:开发文章服务:5:开发【发表文章,接口】;
    【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)
    Linux eBPF介绍(二)
    流水线作业模拟程序
  • 原文地址:https://blog.csdn.net/m0_61832361/article/details/133562890