SpringBoot 日志文件:日志的作用?为什么要写日志?

简介: SpringBoot 日志文件:日志的作用?为什么要写日志?

🎇前言

日志、日志,日志就是记录发生了什么。为啥要记录发生了什么呢?想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?因此我们需要记录程序的行为,通过这些行为能让我们更好的发现和定位错误所在位置。


除了发现和定位问题之外,还可以通过⽇志实现以下功能:

记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。

记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。

记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。


可以看出来日志在程序中扮演这非常重要的角色了。


1.日志长什么样子?

SpringBoot 项目启动的时候默认就会有日志输出,如下图:


fb737f699d844e9fba3dc7c9b630052c.png


通过上述日志信息提出三个疑问:

1.Spring Boot 如何打印日志?(提前把这个说了:它内置了日志框架,因此可以打印日志)

2.默认情况下,输出的日志并非是开发者定义和打印的,开发者怎么在程序中⾃定义打印⽇志呢?

3.日志默认打印在控制台上,而控制台的日志不能保存,如何将日志永久保存呢?

接下来让我们寻找找答案


2.自定义打印日志

自定义打印日志分为两步走:

在程序中得到日志对象

使用日志对象的相关语法输出打印内容

2.1 在程序中得到日志对象

//1.得到日志对象
private final static Logger logger = LoggerFactory.getLogger(TestController.class);

在导包时,我们使用的时slf4j包下面的 Logger,这里不要导包导错了。



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

2.2 使用日志对象打印日志

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

日志打印结果:



这日志打印出来看起来像是一串字符串,我们如何去看出来日志打印的是什么东西呢?看下图的介绍:



日志之间有很多等级划分,我们通常把他分为六个等级。


3.日志级别

3.1 日志级别的分类与使用

日志级别一览表(由上到下等级递增):


image.png


3.2 日志级别有什么用呢?

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

2.日志级别可以控制,不同环境下打印日志的要求可以设置(一般分为开发环境和生产环境),⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输出尽量少的日志。

第一条也许比较难理解,我们写代码演示一下,我们知道日志等级默认的是info级别的,我们打印如下日志:

@Controller
@ResponseBody
public class TestController {
    private final static Logger logger = LoggerFactory.getLogger(TestController.class);
    @RequestMapping("/sayHi")
    public String sayHi(String name) {
            logger.trace("----------- 我是 trace 级别的日志 -----------");
            logger.debug("----------- 我是 debug 级别的日志 -----------");
            logger.info("----------- 我是 info 级别的日志 -----------");
            logger.warn("----------- 我是 warn 级别的日志 -----------");
            logger.error("----------- 我是 error 级别的日志 -----------");
        if(!StringUtils.hasLength(name)) {
            name ="张三";
        }
        String res = "你好" + name;
        return  res;
    }

观察控制台:



你会新奇的发现,比info级别小的日志,没有出现在控制台,也就是没有打印,这就是第一条说的, 日志级别可以帮你筛选出重要的信息。

3.3 日志级别的设置

这个日志级别怎么有用,我们应该如何设置日志级别呢?答案是在配置文件(yaml文件或者properties文件)中设置,我们这里使用yaml文件。

打印大于error级别的日志,如下图,:

logging:
  level:
    root: error

设置完等级,我们再次启动项目,看看是否符合我们的预期,看下图,它符合我们的预期,只打印了 error级别的日志。



4.日志持久化保存

上方举得例子都是打印在控制台上的,然而在生产环境上需要将日志持久化保存下来,以便追溯问题位置。

想要将日志进行持久化保存,只需要在配置文件中指定日志的存储目录或者指定日志保存文件名之后,SpringBoot 就会将控制台的日志写到我们配置的目录或文件中去。

配置文件的保存路径:

# 设置日志文件的目录
logging:
  file:
    path: F:\\info\\

我们再次启动项目,打开设置好的路径,看看是否有日志保存:

打开后可以看到有日志保存,证明我们的设置是正确的。



5.更方便的日志输出

每次打印日志,我们都是使用 LoggerFactory.getLogger(×××.class)这样的操作,代码显得冗余,我们可以使用更简单好用的日志输出方法,使用 lombok 来更简单的输出。

其步骤大概分为两步:

1.添加 lombok 框架支持

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

5.1 添加 lombok 框架

这个框架提供了非常多的简便注解,可以减少代码冗余,如果有需要可以去了解一下!

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

5.2 使用注释输出日志

我们在类上方添加@Slf4j注释,在使用时我们就会得到一个对象log对象。代码如下:

@Controller
@ResponseBody
@Slf4j
public class TestController {
    @RequestMapping("/sayHi")
    public String sayHi(String name) {
            log.trace("----------- 我是 trace 级别的日志 -----------");
            log.debug("----------- 我是 debug 级别的日志 -----------");
            log.info("----------- 我是 info 级别的日志 -----------");
            log.warn("----------- 我是 warn 级别的日志 -----------");
            log.error("----------- 我是 error 级别的日志 -----------");
        if(!StringUtils.hasLength(name)) {
            name ="张三";
        }
        String res = "你好" + name;
        return  res;
    }
}


🎆总结

1.日志时程序中的重要组成部分,使用日志可以快速的发现和定位问题。

2.在配置文件中设置日志时,设置的等级越高,收到的日志信息也就越少。

3.SpringBoot 内置了日志框架,默认情况下使用的是 info 日志级别打印在控制台上,我们可以通过配置文件将日志持久化。

4.在手搓日志中,代码有冗余,我们可以使用 lombok 提供的 @Slf4j 注解和 log对象 快速的打印自定义日志。


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
116 2
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
625 5
|
9月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
591 4
springboot-多环境配置文件
|
9月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2191 1
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1063 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 格式,因其层次清晰,但需注意格式要求。
866 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`创建日志实例即可。
674 0
|
10月前
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler(&quot;/img/**&quot;).addResourceLocations(&quot;file:E:\\myProject\\forum_server\\&quot;)`配置,使前端可通过URL直接访问图片。
654 0
Springboot静态资源映射及文件映射
|
5月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
921 5
|
9月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现