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

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
575 5
|
9月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2159 1
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1034 0
|
9月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
829 0
|
9月前
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
642 0
|
5月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
849 5
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
402 5
|
11月前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
425 5
|
11月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
800 8
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
341 1