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

这篇具有很好参考价值的文章主要介绍了SpringBoot 日志文件:日志的作用?为什么要写日志?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

🎇前言

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

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

  • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
  • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
  • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

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

1.日志长什么样子?

SpringBoot 项目启动的时候默认就会有日志输出,如下图:
SpringBoot 日志文件:日志的作用?为什么要写日志?

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

  1. Spring Boot 如何打印日志?(提前把这个说了:它内置了日志框架,因此可以打印日志)
  2. 默认情况下,输出的日志并非是开发者定义和打印的,开发者怎么在程序中⾃定义打印⽇志呢?
  3. 日志默认打印在控制台上,而控制台的日志不能保存,如何将日志永久保存呢?

接下来让我们寻找找答案

2.自定义打印日志

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

  • 在程序中得到日志对象
  • 使用日志对象的相关语法输出打印内容

2.1 在程序中得到日志对象

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

在导包时,我们使用的时slf4j包下面的 Logger,这里不要导包导错了。
SpringBoot 日志文件:日志的作用?为什么要写日志?
因为 SpringBoot 中内置了日志框架slf4j,所以我们可以直接在程序中调用slf4来输出日志。

2.2 使用日志对象打印日志

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

日志打印结果:
SpringBoot 日志文件:日志的作用?为什么要写日志?
这日志打印出来看起来像是一串字符串,我们如何去看出来日志打印的是什么东西呢?看下图的介绍:
SpringBoot 日志文件:日志的作用?为什么要写日志?

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

3.日志级别

3.1 日志级别的分类与使用

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

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

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;

    }

观察控制台:
SpringBoot 日志文件:日志的作用?为什么要写日志?
你会新奇的发现,比info级别小的日志,没有出现在控制台,也就是没有打印,这就是第一条说的, 日志级别可以帮你筛选出重要的信息。

3.3 日志级别的设置

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

logging:
  level:
    root: error

设置完等级,我们再次启动项目,看看是否符合我们的预期,看下图,它符合我们的预期,只打印了 error级别的日志。
SpringBoot 日志文件:日志的作用?为什么要写日志?

4.日志持久化保存

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

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

配置文件的保存路径:

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

我们再次启动项目,打开设置好的路径,看看是否有日志保存:
打开后可以看到有日志保存,证明我们的设置是正确的。
SpringBoot 日志文件:日志的作用?为什么要写日志?

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对象。代码如下:文章来源地址https://www.toymoban.com/news/detail-513300.html

@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对象 快速的打印自定义日志。

到了这里,关于SpringBoot 日志文件:日志的作用?为什么要写日志?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么要写测试用例,测试用例写给谁看?

    “为什么要编写测试用例,测试用例写给谁看”,这个问题看似简单,但却涵盖了一系列复杂的考虑因素,并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”,我将通过以下5个方面进行展开: 1、为什么要写测试用例? 2、测试用例写

    2024年02月05日
    浏览(40)
  • 我为什么要写《百图解码支付系统设计与实现》专栏(附专栏大纲)

    致谢 @月朦胧 提出的“状态机领域模型同时被两个线程操作怎么避免状态幂等问题” @赵晓军528 @康文彬 指出了状态机文章中有关键代码缺失 @用户4725518259032 指出了需要缺失hashCode()的问题。 很多其他网友也给了很多有益反馈,无法一一感谢。 本周更新 分布式流控系列文章。

    2024年01月16日
    浏览(46)
  • 为什么SQL日志文件很大,该如何处理?

    SQL Server 日志文件是记录所有数据库事务和修改的事务日志文件。用 SQL 术语来说,此日志文件记录对数据库执行的所有 INSERT 、 UPDATE 和 DELETE查询操作。 如果数据库联机或恢复时日志已满,SQL Server 通常会发出 9002 错误。在这种情况下,数据库只能读取而不能更新。此篇文章

    2024年02月06日
    浏览(66)
  • java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

    当使用 Logback 日志框架和 RabbitMQ 的 @RabbitHandler 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中,你可以利用 MDC(Mapped Diagnostic Context)机制。MDC 是一个线程绑定的上下文容器,允许

    2024年02月09日
    浏览(48)
  • 【Linux操作系统】编译过程中遇到的问题-为什么加-c?执行文件提示无法执行二进制文件?main函数参数argc和*argv[]的作用和理解?

    在使用GCC编译器进行程序开发时,我们经常会遇到一些编译过程中的问题, 比如为什么要加上\\\"-c\\\"选项,以及为什么生成的可执行文件无法执行等问题。 本篇博客将详细介绍这些问题,并给出相应的代码和解释,帮助读者更好地理解GCC编译过程中的\\\"-c\\\"选项和main函数的参数a

    2024年02月12日
    浏览(69)
  • 为什么要做黑盒测试?黑盒测试有什么作用?

    对于软件测试的从业者来说,黑盒测试是十分重要的测试方式,它可以弥补白盒测试检查不到的部分。可能刚刚入门的测试小白,对于为什么要做黑盒测试?黑盒测试有什么作用?仍然抱有很大的疑问。下面小编就来从黑盒测试的概念、作用和优点,带领大家全面认识黑盒测

    2024年02月05日
    浏览(50)
  • web中为什么要引入service层以及前端控制器DispatchServlet的作用以及原理剖析

    review: 最初的做法是: 一个请求对应一个Servlet,这样存在的问题是servlet太多了 把一些列的请求都对应一个Servlet, IndexServlet/AddServlet/EditServlet/DelServlet/UpdateServlet - 合并成FruitServlet 通过一个operate的值来决定调用FruitServlet中的哪一个方法 使用的是switch-case 在上一个版本中,Ser

    2024年02月04日
    浏览(41)
  • 为什么TM服务器要安装php~ 现在服务器都用什么php环境,服务器安装php环境的作用是什么?

    \\\"想像力比知识更重要。因为知识是有限的,而想像力是无限,它包含了一切,推动着进步,是人类进化的源泉。 -- 爱因斯坦 为什么服务器要安装php~ 导读:今天来给各位分享关于服务器为什么安装PHP的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开

    2024年02月16日
    浏览(68)
  • (一)springboot实战——为什么是springboot?

    为什么是springboot?江湖夜雨,传说依旧,不懂springboot一技之长,如何混迹java圈,本节内容我们介绍一下spring的一些基本特性。尤其是springboot3的基本特性,使得我们更好的理解springboot3。 springboot的特点 -可以快速的创建一个独立的spring项目,取代老式的SSM项目 - 直接嵌入T

    2024年02月09日
    浏览(85)
  • 有了Spring为什么还需要SpringBoot呢

    目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 1. 配置文件和依赖太多了!!! spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的组件代码是轻

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包