Spring Boot 日志文件有什么用

目录

一、自定义打印日志

1.1 日志框架说明

1.2 实现自定义打印日志

1.3 日志的格式说明

2.1 日志的级别

2.2 设置日志级别的作用:

2.3 如何设置日志的级别

二、 日志的持久化

3.1 设置日志保存路径  (在 .yml 配置文件中设置日志保存路径)

3.2 设置指定日志文件名称

3.3 日志如何进行清理

三、更简单的日志输出 -- Lombok

4.1 使用注解:@Slf4j


前言

    日志是一个程序必不可少的部分,如果程序在运行的过程中报错了,此时可以通过记录错误日志和警告日志 快速的定位问题并且找到问题原因。

    日志除了定位问题之外,还有以下功能:

  • 记录用户登录日志,方便分析用户是正常登录还是非法用户恶意破解
  • 记录系统的操作日志,方便数据恢复和定位操作人
  • 记录程序执行时间,方便程序在未来的优化,为其提供数据支持

一、自定义打印日志

当启动一个 Spring Boot 项目时,默认就有日志的输出,如下图:

     上图就是 Spring Boot 输出的控制台的信息,所以,Spring Boot 中内置了日志框架,否则不会输出日志,并且输出的日志不是程序猿打印的,如何自定义打印日志;最后:默认是显示在控制台上的,如果项目重启了,此时日志也就消失了,那如何将日志进行持久化方便开发人员去查找呢?

1.1 日志框架说明

    日志框架也是有很多种的,JUL,log4j... 每个日志的框架实现的方式都是不一样的,所以如果每个日志框架都要系统的学习,成本就很高,因此为了减少开发过程中的学习成本,此时就引入了日志门面:SLF4J。

    和JDBC 编程是一样的,当有很多套规范的时候,各种数据库连接就麻烦了很多,需要学习不同数据库提供的不同的接口,学习成本很高,此时就引入了 JDBC 编程 去对接不同的数据库的接口,最后程序猿只需要学习 JDBC 编程之后就可以连接到不同的数据库;SLF4J也是同样的,日志的框架有很多,最后只需要学习 SLF4J 就可以对接到不同的日志框架了,相当于是一个总的接口。

1.2 实现自定义打印日志

1. 得到日志对象

    private static final Logger log =
            LoggerFactory.getLogger(TextController.class);

注:(1)Logger 对象是 SLF4J提供的对象,导包时需要                   注意.

      (2)Logger 对象的参数可以是一个类对象,也可以是一个类名(不推荐类名),如果参数是一个类名,打印日志时只会显示类名,如果同一包下有相同的类名,此时的日志信息中就无法区分多个同名的类

2. 使用日志提供的方法打印日志

下图代码所示:

        log.trace("i'm trace");//所有执行的痕迹都打印
        log.debug("i'm debug");//调试的时候打印
        log.info("i'm info");//普通日志,默认就是这个级别
        log.warn("i'm warn");//警告日志
        
        log.error("i'm error");//错误日志

运行结果:

    注:上述的结果是已经设置了日志的级别了,默认的级别是info,所以这个级别以下的日志打印信息,在默认情况下是不会进行打印的,只会输出info以上的级别。

 1.3 日志的格式说明

    可以看到上述日志打印的格式: 时间,级别,线程信息,日志打印的所在类,(在上述创建一个日志对象时传参了一个类对象,此时在打印时就可以拿到这个类)   日志的打印信息

 2.1 日志的级别

(1)trace:痕迹,微量,级别最低,设置后几乎所有的日志信息都会进行打印
(2)debug:开发环境中常用;需要调试时打印的关键信息
(3)info:普通日志的打印,日志的默认级别
(4)error:级别较高,错误的日志打印的信息

(5)fatal:致命的,因代码异常导致程序崩溃时会打印此日志

(注:只会在整个程序都异常时才会打印这个级别,否则默认也是不会打印这个日志的

     日志级别的顺序:

2.2 设置日志级别的作用:

(1)帮开发人员筛选重要的信息,例如:设置级别为 error,此时就可以只关注程序的报错打印的日志了,对于普通的日志和日常的业务中打印的日志可以忽略,更高效的帮助开发人员快速的定位程序的问题。
(2)可以控制在不同的环境下是否需要打印日志,例如:在开发环境中,需要详细的打印日志的调试信息,但是在生产环境中,需要保证性能和安全性就应当尽量减少日志的输出,而开发的调试打印日志就造成了数据污染,所以可以通过设置日志的级别,以控制不同环境中是否需要打印日志。

2.3 如何设置日志的级别

    设置日志的级别是在配置文件中设置,此处演示在 yml 配置文件中如何设置日志的级别。

    日志级别的设置是非常灵活的,可以精确到某一个子文件夹中的某一个类,如下代码:

#  日志级别的设置
logging:
  level:
    root: error #将根目录下的文件夹设置error级别
    com:
      example:
        demo:
          controller: trace   #单独将

    上述设置日志信息打印就是将根目录(root)目录下的文件设置为 error级别的,然后将 demo 包下的 controller 类设置成 trace 级别的(所有的日志信息都打印)

    运行结果:

     可以看到 Spring Boot 项目的启动日志并没有打印(包括端口号和项目启动时间),因为在上述配置文件中已经设置了 root 路径下的所有包下的 日志打印级别为 error,项目的启动日志也是包含在这个包中的,所以 error 以下级别的日志不会进行打印。

    但是在访问 sayHi 方法之后,可以看到 Controller 这个类的所有日志的信息全部都打印了,是因为上述配置文件中的 Controller 类中的日志打印级别为 trace。

二、 日志的持久化

    持久化很常见,在数据库中介绍过 作用就是将数据持久化,io操作中也提到将数据写入文件 也是对数据持久化,日志的持久化也是一样的,就是将日志的信息保存下来,之后方便开发人员查看并定位问题。

3.1 设置日志保存路径  (在 .yml 配置文件中设置日志保存路径)

# 日志保存路径(1. 尽量不要保存在 系统盘(C盘)) (2. 路径中不要出现中文)
logging:
  file:
    path: D:\home   #此时只需要将路径写上即可 不用设置目录名,会自动生成名录名的

在 项目启动之后,可以在对应目录中查看是否有日志文件

 访问 sayHi 方法后,可以查看是否会有日志信息覆盖原来的 日志信息:

     首先并没有创建新的日志文件,可以看到原来的日志并没有消失,后来新的日志是在原来的基础上进行了追加操作。

3.2 设置指定日志文件名称

# 日志保存路径(1. 尽量不要保存在 系统盘(C盘)) (2. 路径中不要出现中文)
logging:
  file:
    name: D:\\home\\springBoot.log   
    #此时可以设置写入特定文件,可以包含指定目录,也可以不指定目录,
    #如果不指定特定目录,创建日志文件是和项目在同一级目录下

     运行结果:

 3.3 日志如何进行清理

     查看 Spring Boot 更多系统配置项,访问官网:https://docs.spring.io/springboot/docs/current/reference/html/application-properties.html#application-properties

可以点击上述网址查看更多配置,可以看到日志文件可以设置最大日志文件大小:

    还有如果超出指定文件大小之后需要重新创建日志文件,那文件名是如何命名的;

    会有指定的文件名的格式来区分 日志文件的日期的,如:在文件名之后 + 数字的形式或者日期的形式来区分 很多的日志文件。

    所以如果日志文件过了很长时间之后,如果没用了就可以删除了。

三、更简单的日志输出 -- Lombok

    在打印日志时每次都需要创建一个日志对象,而且是每个类都要添加一个日志对象,很繁琐,因此有一种更简单的方式实现日志的打印:使用注解 -- @Slf4j 。

4.1 使用注解:@Slf4j

如果在创建 Spring Boot 项目时,起步依赖没有添加 Lombok,此时可以先安装一个插件:

     之后在pom.xml 中添加依赖:

     使用注解方式创建日志对象:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良月初十♧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值