SpringBoot 日志文件

文章目录

日志作为一个完整程序的一部分,可以帮助我们发现和定位程序中出现的问题,也记录了许多有用并且重要的信息。

在SpringBoot中,框架有内置基础的日志框架,在我们运行SpringBoot项目时,可以在控制台看到相关的日志信息:

这里输出的日志是由于框架内置默认打印的,那么开发者要如何自定义日志打印呢?

自定义日志打印

自定义日志的打印包含了两步:

  • 得到日志对象
  • 使用日志对象提供的方法,自定义打印的日志内容
java 复制代码
package com.example.demo;

import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController2 {

    //得到日志信息

    private static Logger logger= LoggerFactory.getLogger(TestController2.class);

    //使用日志对象自定义打印日志内容

    @PostConstruct
    public void postConstruct(){
        logger.info("~~~~~~~~~~~~~~~~~~~~~自定义打印的日志~~~~~~~~~~~~~~~~~~~~~~~~~");
    }

}

执行结果:

info( )方法可以使用双引号定义需要输出的指定内容;

日志级别

根据使用频率和场景的不同,日志分为了不同的级别,日志的级别的主要作用就是筛选和过滤符合目标的日志信息;

日志级别

常见的日志级别从低到高分别有:

  • trace;
    追踪,追溯,级别最低;
  • info;
    默认打印的信息;
  • debug;
    调试,打印调试过程的关键信息;
  • warn;
    警告,一些不会影响程序运行但需要注意的信息;
  • error;
    错误,程序中的错误信息,影响程序的运行;
  • fatal;
    致命的,会导致程序退出执行,级别最高;

日志的级别越低,接收和打印的日志信息就越少;

日志的使用主要包括日志信息级别的配置和保存路径的设置,这些设置同样需要在配置文件中进行配置;

级别设置

经配置文件设置日志的打印级别之后,最终程序打印的日志的级别一定是大于等于配置文件中设置的日志级别的;即当配置文件设置日志的打印级别为debug时,最终打印的日志就是日志级别为debug、info、warn、error级别的;不在配置文件中主动设置日志打印级别时,默认从info级别开始打印;

日志持久化

对于输出在控制台的日志信息,当我们关闭程序或重新运行程序时,之前的日志信息都会被清除。但在一些场景下,我们可能事后需要根据日志来获取一些有用的信息,这就需要将日志进行保存,方便之后进行溯源,即日志的持久化。

日志的持久化操作依然依靠配置文件来实现,即在配置文件中指定日志的存储路径或指定日志保存的文件名;

关于日志的持久化,对于同一个程序,日志信息会不断追加,而不会因为程序重新运行而被覆盖;当日志文件过大时,会默认进行文件的拆分。

lombok输出日志

前面提到自定义打印日志时,第一步首先需要得到日志对象,这一步操作无疑是繁琐和麻烦的,因此我们可以使用lombok框架来解决这个问题。

使用lombok来实现更简单的日志输出,第一步就是为项目添加lombok框架支持:

  • 添加editstarters插件
  • 在pom.xml文件下右键选择Generate
  • 选择刚刚安装的插件;
  • 直接点击ok;
  • 搜索lombok添加依赖;

最终在pom.xml文件中就可以看到添加的lombok依赖;

lombok依赖添加成功以后,就可以借助@Slf4j注解来输出日志了:

java 复制代码
package com.example.demo;

import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;

@RestController

@Slf4j

public class TestController3 {

    @PostConstruct
    public void postConstruct(){

        log.info("~~~~~~~~~~~~~~~~~~~~~log.info~~~~~~~~~~~~~~~~~~~~~~~~~");

    }


}

log对象是由注解@Slf4j提供的,这也就省略掉了之前手动获取日志对象的操作;其实之前手动获取日志对象的代码就等价于这里的注解,这一点可以通过程序运行生成的字节码文件看到:

左边是我们编写的java文件,右边是程序编译运行之后生成的.class文件,可以看到注解@Slf4j就是获取日志对象,与手动获取的方式的代码等价;

lombok框架还提供了许多注解,使用这些注解可以在一定程度上简化代码,常见的有:

  • @Getter------getter方法
  • @Setter------setter方法
  • @ToString------toString方法
  • @EqualsAndHashCode------equals方法和hashCode方法
  • @Slf4j
  • @Data------组合注解,包括了上述所有注解和其他注解
相关推荐
十年Java程序媛几秒前
注解已经加上,但是事务没有回滚?拆解 AOP 代理底层原因 + 代码示例
java
μθημα2 分钟前
K8s Pod 管理实战:虚拟机环境下的具体命令与步骤
java·docker·kubernetes
数据狐(Datafox)10 分钟前
1688.item_search工程实战:1688商品列表API分页采集与B2B货源数据分析落地
java·前端·数据分析
省长10 分钟前
不想写代码,但想要集成一个登录页面?Sa-Token-Quick-Login 帮你实现!
java·后端·开源
得物技术14 分钟前
企业级 MultiAgent 的记忆系统:短期上下文与四层记忆架构实现|得物技术
java·人工智能·后端
撩得Android一次心动21 分钟前
Kotlin 语言【知识点整理3】
java·开发语言·笔记·学习·kotlin
朝发如雪26 分钟前
快速掌握Linux(4)(进程)
java·linux·服务器
JackSparrow41437 分钟前
Kafka(七)集成Apache Avro+Apicurio Schema Registry以保障生产者与消费者的消息兼容性
java·中间件·rpc·kafka·apache·avro·schema-registry
林森lsjs38 分钟前
零基础吃透二叉树:定义、遍历与高频算法 —数据结构柒
java·开发语言·数据结构·算法·二叉树
MacroZheng40 分钟前
又一个神级画图Skill开源,再见draw.io!
java·人工智能·后端