SpringBoot日志文件

在这里插入图片描述

文章目录

  • 一、日志的作用
  • 二、自定义打印日志
    • 常见日志
    • 自定义日志打印
  • 三、日志级别
  • 四、日志持久化
  • 五、lombok实现日志输出

一、日志的作用

日志是我们程序重要组成部分,就好比我们在做编程题时,如果我们的程序报错了,但不允许你去打开控制台查看日志信息,这样你能准确确定报错的原因吗?

日志有以下作用:
1.记录用户操作的审计日志。监管部门有时也会对此进行要求。记录用户的操作可以帮助追溯责任和评估安全风险
2.可以快速定位程序问题的根源。当程序出现异常或错误时,通过查看日志可以帮助开发人员更快地定位问题,并进行修复
3.追踪程序执行的过程。帮助开发人员分析代码并进行性能优化
4.提高统计信息。比如可以统计Web页面的受欢迎程度,或者分析客户端和服务器之间异常交互的情况
5.提高服务可用性。例如在分布式系统中,通过收集和分析各个节点的日志可以更好地监控系统运行状态,及时发现和排除故障,保障系统正常运行
SpringBoot日志文件_第1张图片
我们SpringBoot项目在启动时默认会有日志输出,如上图,但是上述日志我们能够发现一些问题:
1.SpringBoot内置了日志框架(否则无法输出日志)
2.默认情况下,输出的日志不是我们开发者自定义和打印的,那么我们如何在程序中自定义打印日志呢?
3.日志默认打印在控制台上,是不能被持久化保存的,那么我们如何将日志持久化保存下来呢?

二、自定义打印日志

常见日志

SpringBoot日志文件_第2张图片
我们SpringBoot内置了SLF4J和logback,我们用户不是直接操作具体的日志对象,而是首先会来到门面日志SLF4J,然后SLF4J然后再去操作具体的日志对象
在这里插入图片描述
SpringBoot日志文件_第3张图片

自定义日志打印

SpringBoot日志打印:
1.得到日志对象
2.使用日志对象去打印日志信息
1.获取日志对象
SpringBoot日志文件_第4张图片
我们的Logger对象是属于org.slf4j包下的,大家导入的时候需要注意,而且这里我们的Logger是接口是不能直接new的,而是通过日志工厂LoggerFactory获取的:
SpringBoot日志文件_第5张图片
这里的getLogger()有两种传参方式,我们可以传name,也可以传入类型,但是建议大家传入类型。
SpringBoot日志文件_第6张图片
2.打印日志

@Controller
public class LogController {
    //获取日志对象
    private static final Logger log = LoggerFactory.getLogger(LogController.class);
    
    @PostConstruct
    public void postConstruct() {
        //打印日志
        log.trace("log trace");
        log.debug("log debug");
        log.info("log info");
        log.warn("log warn");
        log.error("log error");
    }
}

我们运行程序:
SpringBoot日志文件_第7张图片
为什么只打印了三个日志信息,因为剩下的两个日志信息级别没有达到

日志格式说明:
SpringBoot日志文件_第8张图片

如果我们getLogger传入的是name,那么我们的打印信息会发生什么变化呢?
SpringBoot日志文件_第9张图片

三、日志级别

为什么要分日志级别?
日志级别是为了方便开发人员根据日志的重要性、优先级别等信息来对日志进行分类记录。具体来说,为什么要有日志级别,可以从以下方面考虑:
1.帮助优化日志输出。不同的应用程序可能需要记录的日志信息不同,而且这些信息的重要性也各不相同。通过使用不同级别的日志,可以过滤掉一些不必要或不重要的日志信息,减少日志文件的大小,避免容易导致日志文件过大的问题。
2.提供更好的故障排查能力。当系统出现异常或错误时,如果我们将各种日志及其详细信息都记录下来,那么在排查问题时将面临大量的无用信息。而通过设置适当的日志级别,可以将关键信息单独提取出来,从而更快地定位问题。
3.提高系统的运行效率。在日志记录的过程中,会对应用程序的性能带来一定的影响。通过使用适当的日志级别,可以在不影响系统正常运行的前提下,减少不必要的日志记录,从而提高系统的运行效率。

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

SpringBoot日志文件_第10张图片

日志级别的设置:
我们想要设置日志级别只需要在配置文件中设置logging.level配置即可,这里我们设置是十分灵活的,不仅可以设置整个项目的默认日志级别,还可以设置具体类的日志级别

logging:
  level:
    root: error #设置默认日志级别为error
    com:
      example:
        springboot_frist: trace #设置具体模块级别为trace

SpringBoot日志文件_第11张图片
我们可以发现,当我们设置了之后,控制台只打印了我们设置日志级别内的日志信息,其他的日志信息并没有打印。
我们可以得到结论:日志的默认输出级别是info

四、日志持久化

目前我们的日志都是输出在控制台上的,然而我们在生产环境下往往需要将日志保存下来,以便于后续出现问题时去查找原因,我们将日志保存下来的过程称之为持久化。
SpringBoot日志持久化只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名,SpringBoot就会将控制台中打印的日志写到对应的目录或者文件下了。

# 设置日志保存路径:
logging:
  file:
    path: D:\\soft\\
# 设置日志保存名称
logging:
  file:
    name: D:\\soft\\springboot.log

SpringBoot日志文件_第12张图片
我们来打印一下日志:
SpringBoot日志文件_第13张图片
我们可以发现日志已经持久化的存储到了日志文件中,但将所有的日志文件都持久化到了文件中。我们可以自己在配置文件中设置相应的日志级别,大致步骤:
1.不同包定义不同的日志级别
2.使用日志对象打印所有类型的日志
3.设置固定的日志保存文件名
我们可以发现日志文件默认名为spring.log。还有需要注意:日志保存路径不要保存到系统盘(C盘)、路径中不要出现中文和空格。

我们试试重启下系统看看日志文件还在吗?
SpringBoot日志文件_第14张图片
我们观察上述结果可以得到一个结论:日志文件一旦生成,那么日志文件和内容就会永久的保存,不会出现文件或者内容的丢失,无论进行什么操作都会保持这个特性。

生产级别日志分类:
1.程序运行日志(存放在文件)
2.业务日志(存放数据库)

我们日志文件有默认的文件大小
在这里插入图片描述
默认大小为10MB,当超过这个容量会创建新的日志文件,我们也可以手动设置日志文件大小

五、lombok实现日志输出

SpringBoot日志文件_第15张图片
我们每次都是以LoggerFactory.getLogger(xxx.class)的方式,不仅很繁琐,而且每个类都要添加一遍,我们这里可以使用lombok实现更简单的输出
1.添加lombok框架依赖

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

2.使用@slf4j注解输出日志
SpringBoot日志文件_第16张图片
SpringBoot日志文件_第17张图片
我们输入log后就会有提醒(前提是安装了lombok插件)

@Controller
@Slf4j //给当前类中添加一个log的日志对象 (== SLF4J提供的Logger)
public class LogController {

    @PostConstruct
    public void postConstruct() {
        //打印日志
        log.info("我是log: info");
        log.error("我是log: error");
    }
}

SpringBoot日志文件_第18张图片
java程序运行原理:
SpringBoot日志文件_第19张图片
lombok的作用:
SpringBoot日志文件_第20张图片

你可能感兴趣的:(Spring框架,spring,boot,java,后端)