SpringBoot日志详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 日志是程序的重要组成部分,如果程序报错了,我们可以打开控制台看日志,来找到报错的原因。

1.日志及日志的作用


日志是程序的重要组成部分,如果程序报错了,我们可以打开控制台看日志,来找到报错的原因。


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


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

微信图片_20230111202932.png

如图所示,就是SpringBoot的日志打印。


2.自定义日志打印


完成自定义日志的打印需要以下两步:

1、在一个类中先获取到打印日志对象(日志框架提供日志对象,日志框架默认已经集成到SpringBoot中了)

2、使用日志对象提供的方法实现日志的打印


下边具体阐述:


2.1 得到日志对象


在程序中获取日志对象需要使用日志工厂LoggerFactory,如下代码所示:


@Controller
public class UserController {
    private static final Logger log= 
            LoggerFactory.getLogger(UserController.class);
}


日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、直观的定位到问题类。


注意:Logger对象是属于org.slf4j包下的,不要导错包


微信图片_20230111202925.png

因为SpringBoot中内置了日志框架Slf4j,所以咱们可以直接在程序中调用slf4j来输出日志。


2.2 使用日志对象打印日志


日志对象的打印方法有很多种,如下代码所示:


@Controller
@ResponseBody
public class UserController {
    //1.先得到日志对象(来自slf4j)
    private static final Logger log=
            LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi() {
        //2.使用日志对象提供的打印方法进行日志打印
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
    }
}


运行结果如下图:


微信图片_20230111202918.png

我们可以发现,我们调用了五个方法来进行打印的,但是控制台中只显示了三条我们的打印信息,这是因为有日志级别的约束,默认的日志级别是info级别,只能打印info及info以上的日志信息,日志级别的具体详情见下:


3.日志级别


3.1 日志级别有什么用?


日志级别可以帮你筛选出重要的信息,比如设置日志级别为error,那么就可以只看程序的报错日志了,对于普通的调式日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。

日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息,而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。


3.2 日志级别的分类


日志的级别如下:

1.trace:少许日志(级别最低)

2.debug:调试日志

3.info:普通信息日志(默认日志级别)

4.warn:警告日志

5.error:错误日志

6.fatal:致命的日志(系统输出的日志,不能自定义打印)


日志级别的顺序:


微信图片_20230111202915.png

3.3 日志级别的设置


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


微信图片_20230111202911.png

再次打印日志信息看结果:


微信图片_20230111202907.png

可以发现这次的日志打印信息少了很多,这是因为全局的日志级别是warn,比warn级别低的日志信息不会被打印,而在controller包下设置的日志级别是trace,所以它的五条日志信息都进行了打印。


根据上边的日志打印结果我们可以得出结论:

当存在局部日志级别和全局日志级别时,当访问局部日志时,使用的是局部日志级别,也就是局部日志级别>全局日志级别


4.日志持久化


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


想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名,SpringBoot就会将控制台的日志写到相应的目录或文件下了。


微信图片_20230111202903.png

注意\会引起转义,所以可以使用\\或者/来防止转义。

再次运行,可以看到日志信息已经被写到指定的文件中了。


微信图片_20230111202900.png

5.通过Lombok实现更简单的日志输出


我们每次都使用LoggerFactory.getLogger(xxx.class)很繁琐,且每个类都添加一遍,也很麻烦,下边我们展示使用lombok来实现更简单的日志输出。

1.添加lombok框架支持

2.使用@slf4j注解输出日志


5.1 添加lombok依赖


我们可以先下载以下插件:


微信图片_20230111202855.png

然后在pom.xml文件中右键->generate->插件,将lombok依赖引入pom.xml配置文件中


微信图片_20230111202852.png

5.2 输出日志

1、使用@Slf4j得到日志对象log

2、使用log对象自定义打印日志


微信图片_20230111202848.png

5.3 lombok更多注解说明


基本注解:


微信图片_20230111202845.png

组合注解:


微信图片_20230111202841.png

日志注解:


微信图片_20230111202831.png


6.总结


日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,Spring Boot内置了日志框架,默认情况下使用的是info日志级别将日志输出到控制台的,我们可以通过lombok提供的@Slf4j注解和log对象快速的打印自定义日志,日志包含6个级别:


微信图片_20230111202826.png

日志级别依次提升,而日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志永久地保存下来。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
43 5
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
32 1
|
1月前
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
19 2
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
127 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
1月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
2月前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
225 1
|
3月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
3月前
|
XML Java Maven
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
这篇文章详细介绍了如何在Spring Boot项目中使用logback进行日志记录,包括Maven依赖配置、logback配置文件的编写,以及实现的日志持久化和控制台输出效果。
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
|
3月前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
3月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑