Spring Boot日志文件

目录

前言🍭

一、日志的作用🍭

1、日志真实使用案例:🍉

二、日志怎么用🍭

1、自定义日志打印🍉

Ⅰ、在程序中得到日志对象🍓

 常见的日志框架说明(了解)🍒

Ⅱ、使用日志对象打印日志 🍓

2、日志的级别🍉

Ⅰ、日志级别有什么用?🍓

Ⅱ、日志级别的分类与使用🍓

Ⅲ、日志级别设置🍓

Ⅳ、System.out.println() VS 日志🍓

3、日志持久化🍉

Ⅰ、配置日志文件的保存路径:🍓

路径:🍒

路径+文件名: 🍒

文件名: 🍒

Ⅱ、进行日志持久化 🍓

Ⅲ、日志是追加or覆盖?🍓

三、更简单的日志输出—lombok🍭

1、添加 lombok 依赖🍉

Ⅰ、旧项目添加新依赖框架 🍓

2、输出日志🍉

3、lombok原理解释🍉

4、lombok 更多注解说明🍉


前言🍭

❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️

Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客

前篇我们 讲完了SpringBoot的配置文件,讲解了为什么学配置文件&配置文件的作用,还有两种配置文件的格式与使用。这篇来讲SpringBoot 日志文件,下面我们一起进入SpringBoot 日志文件的世界!

一、日志的作用🍭

日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗?

答案是否定的,写程序不是买彩票,不能完全靠猜,因此日志对于我们来说,最主要的用途就是排除和定位问题。

Spring Boot日志文件用于记录应用程序的运行日志。它可以帮助开发人员在应用程序出现问题时进行故障排除和调试。以下是Spring Boot日志文件的几个用途:

  1. 故障排除:当应用程序发生错误或异常时,日志文件可以提供有关错误发生的上下文信息,如错误堆栈跟踪、错误消息等。开发人员可以根据这些信息来定位和修复问题。
  2. 调试:日志文件可以记录应用程序的运行过程中的详细信息,如请求参数、方法调用、返回结果等。这些信息可以帮助开发人员理解应用程序的运行流程,定位潜在的问题,并进行性能优化。
  3. 监控和性能分析:通过分析日志文件,开发人员可以获取应用程序的运行状态和性能指标,如请求响应时间、吞吐量、并发请求数等。这些信息可以帮助开发人员监控应用程序的健康状况,并进行性能分析和优化。
  4. 安全审计:日志文件可以记录应用程序的操作日志,如用户登录、数据修改等。这些信息可以用于安全审计和追踪用户行为。

所以 Spring Boot日志文件是开发人员在应用程序运行过程中进行故障排除、调试、性能分析和安全审计的重要工具。

1、日志真实使用案例:🍉

比如当我们去百度注册账号时,在注册时候百度不止要在后台添加 一条用户记录,同时也会给百度贴吧添加一条一模一样的用户记录,这样做的目的是为了实现一次注 册,多处使用的目的。不需要用户在两边系统注册了,等于在程序中以极低的成本实现的用户数据的同 步,但这样设计有一个致命的问题,用户在百度注册信息的时候,如果百度贴吧挂了,那么用户的注册 行为就会失败,因为用户在注册的时候需要同步注册到百度系统,但贴吧现在挂了,这个时候怎么办 呢?

最简单的解决方案,百度账号在注册的时候,不管贴吧是否注册成功,都给用户返回成功,如果注册失败了,记录一下日志,等贴吧恢复正常之后,把日志给贴吧的管理人员,让他手动将注册失败的用户同步到贴吧系统,这样就最低成本的解决了问题。这就是日志的重要作用。

二、日志怎么用🍭

Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:

以上内容就是 Spring Boot 输出的控制台日志信息。 通过上述日志信息我们能发现以下 3 个问题:

  1. Spring Boot 内置了日志框架(不然也输出不了日志)。
  2. 默认情况下,输出的日志并是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
  3. 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?

下面我们一起来找寻这些问题的答案。

1、自定义日志打印🍉

开发者自定义打印日志的实现步骤:
  • 在程序中得到日志对象。
  • 使用日志对象的相关语法输出要打印的内容

Ⅰ、在程序中得到日志对象🍓

在程序中获取日志对象需要使用日志工厂 LoggerFactory:

// 1.得到⽇志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
//⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位 到问题类。

Logger 对象是属于 org.slf4j 包下的,不要导入错包。

 常见的日志框架说明(了解)🍒

Ⅱ、使用日志对象打印日志 🍓

日志对象的打印方法有很多种,我们可以先使用 info() 方法来输出日志,如下代码所示

// 2.使⽤⽇志打印⽇志
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class UserController {
    private static final Logger logger= LoggerFactory.getLogger(UserController.class);
    @RequestMapping("Hi")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        logger.info("--------------要输出⽇志的内容----------------");
        return "Hi,Spring Boot";
    }
}

打印信息 :

控制台打印:

浏览器打印(使用的是生产环境,生产环境设置的端口号为:7777):

2、日志的级别🍉

Ⅰ、日志级别有什么用?🍓

  • 日志级别可以控制不同环境下,⼀个程序是否需要打印日志,如开发环境我们需要很详细的信息, 而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。
  • 日志级别可以帮你筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。

Ⅱ、日志级别的分类与使用🍓

日志的级别分为:
  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认日志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件(软件或系统运行过程中发生了严重错误或异常,导致程序无法继续正常执行而必须终止的日志记录),我们是无法主动的去打印fatal日志。

日志级别的顺序:

越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的日志了。

下面我们来看一下下面的代码,来更深入了解一下日志的级别:

@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class UserController {
    private static final Logger logger= LoggerFactory.getLogger(UserController.class);
    @RequestMapping("Hi")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        logger.trace("我是trace");
        logger.debug("我是debug");
        logger.info("我是info");
        logger.warn("我是warn");
        logger.error("我是error");
        return "Hi,Spring Boot";
    }
}

控制台打印:

我们发现只打印了三个,我们不是还打印了trace还有debug吗?

这是因为日志设置的默认级别是info,所以只能打印info级别下面的日志。

Ⅲ、日志级别设置🍓

日志级别配置只需要在配置文件中设置“logging.level”配置项即可:

#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: trace

我们设置默认级别为:trace。看控制台打印:

我们看到设置为trace后,我们要求打印都打印了。但设置为trace之后,可能会导致日志文件过大或者打印输出过长,这可能会给查看和分析日志带来一些困难。

为了解决这个问题,可以考虑以下几个方法:

  1. 调整日志级别:将日志级别设置为更高的级别,例如将级别从trace调整为debug、info或者warn。这样可以减少不必要的日志输出,只保留关键信息。

  2. 筛选日志输出:通过使用日志过滤器或者正则表达式,只打印特定关键字或者模式匹配的日志信息。这样可以减少无关的日志输出,只保留需要的部分。

  3. 分割日志文件:设置日志文件大小限制或者定期将日志文件进行分割,可以防止单个日志文件过大。这样可以方便查看和管理日志文件。

  4. 使用日志分析工具:使用专门的日志分析工具,可以对大量的日志进行快速搜索、过滤和分析。这样可以更方便地查找和定位问题。

 所以在通常,默认 默认级别为info即可,看warn日志和error日志即可。对于warn和error级别的日志消息,你也可以选择查看。

日志级别的设置是特别灵活的,我们还可以针对不同的目录设置不同的日志级别

#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: info
    com:
      example:
        springboard:info

有人说:我打印可以使用System.out.println()啊,为什么一定要使用日志呢?下面我们来比较一下 

Ⅳ、System.out.println() VS 日志🍓

  1. 灵活性:使用日志框架可以方便地控制日志的输出级别,从而在不同环境中灵活地开启或关闭日志输出。而使用System.out.println()则需要手动添加或删除代码。

  2. 可配置性:日志框架可以通过配置文件来设置日志的输出格式、输出位置等信息,而System.out.println()则只能将日志输出到控制台。

  3. 性能优化:日志框架会对日志进行缓冲和异步处理,以提高程序的性能。而System.out.println()会直接将日志输出到控制台,可能会对程序的性能造成一定的影响。

  4. 可扩展性:使用日志框架可以方便地扩展和替换日志实现,例如切换到其他日志框架或自定义日志输出方式。而使用System.out.println()则需要手动修改代码。

  5. System.out.println() 不能被持久化(可接着看后面便知晓了)。

3、日志持久化🍉

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

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

Ⅰ、配置日志文件的保存路径:🍓

路径:🍒

#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: error
    com:
      example:
        springbootdemo: info
  # 设置⽇志⽂件的⽬录
  file:
    path: C:\\logs

在C盘创建应该logs文件夹:

路径+文件名: 🍒

 我们可以自己定义.log的文件名:

# 设置⽇志⽂件的⽂件名
logging:
 file:
 name: C:\\logs\\spring-1.log

文件名: 🍒

#开发模式
#设置默认端口号
server:
  port: 7777
#设置默认日志等级
logging:
  level:
    root: error
    com:
      example:
        springbootdemo: info
  # 设置⽇志⽂件的⽬录
  file:
      name: spring-1.log

如果直接指点文件名,那它就会直接在项目文件下直接生成.log文件:

Ⅱ、进行日志持久化 🍓

@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
public class UserController {
    private static final Logger logger= LoggerFactory.getLogger(UserController.class);
    @RequestMapping("Hi")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        logger.trace("我是trace");
        logger.debug("我是debug");
        logger.info("我是info");
        logger.warn("我是warn");
        logger.error("我是error");
        System.out.println("我是System。");
        return "Hi,Spring Boot";
    }
}

 运行代码:

打开控制台:

 打开logs:

 打开这spring.log:

 可以发现这和控制台打印的一模一样。但是没有打印 System.out.println(),这是因为日志的持久化只会保存日志信息,其他信息是不会去保存的。

Ⅲ、日志是追加or覆盖?🍓

如果我们重新运行代码,这个spring.log里面的内容是被覆盖还是被追加呢?

现在我们重新运行代码,打开spring.log看看:

可以看到日志的内容是追加的,所以不用担心日志会被覆盖或者消失,但是如果一直把它放在一个.log文件里面,那它越来越大,这怎么办啊?这时候就应该去查看一下官方文档:

官方文档

可以看到,日志持久化文件最大为10M,当超过10M是它会重新创建一个新的持久化文件。还有其他持久化设置,感兴趣的可以去了解一下。

三、更简单的日志输出—lombok🍭

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这里讲⼀ 种更好用的日志输出方式,使用 lombok 来更简单的输出。

  1. 添加 lombok 框架支持。
  2. 使⽤ @slf4j 注解输出日志

1、添加 lombok 依赖🍉

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

但是我们在创建Spring Boot时就已经导入了Lombok框架了: 

pom.xml:

Ⅰ、旧项目添加新依赖框架 🍓

安装EditStarters

然后在pom.xml里面右键选择 Generate

选择Edit Starters 

 点击OK

添加需要添加的依赖:

添加完成之后,重新reload就行了。

2、输出日志🍉

package com.example.springbootdemo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller//当前类为控制器
@ResponseBody//返回的是数据,而非页面
@Slf4j
public class ArticleController {
    @RequestMapping("art")
    public String sayHi(){
        //写日志
        // 2.使⽤⽇志打印⽇志
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
        return "Hi,Article";
    }
}

注意:使用 @Slf4j 注解,在程序中使用 log 对象即可输入日志,并且只能用 log 对象才能输出这是 lombok 提供的对象名 

控制台打印: 

3、lombok原理解释🍉

lombok 能够打印日志的密码就在 target 目录里面,target 为项目最终执行的代码,查看 target 目录。如下:

自己所写的代码:

在target目录中,您可以找到编译后的项目代码

可以看到lombok会直接给你生成注释对应的代码 ,这就特别省事了。

Java 程序的运行原理

 Lombok 的作⽤如下图所示:

4、lombok 更多注解说明🍉

基本注解

注解

作用

@Getter

自动添加getter方法

@Setter

自动添加setter方法

@ToString

自动添加toString 方法

@EqualsAndHashCode

自动添加equals 和hashCode 方法

@NoArgsConstructor

自动添加无参构造方法

@AllArgsConstructor

自动添加全属性构造方法,顺序按照属性的定义顺序

@NonNull

属性不能为null

@RequiredArgsConstructor

自动添加必需属性的构造方法,final +@NonNull的属性为必需

组合注解

注解作用
@Data@Getter + @Setter +@ToString +
@EqualsAndHashCode +
@RequiredArgsConstructor +
@NoArgsConstructor

⽇志注解  

注解
作⽤
@Slf4j
添加一个名为 log 的日志,使用slf4j

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保姆级AT32F437 配置RT-Thread 以太网(UDP/TCP Server)

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 ENV版本&#xff1a;v1.3.5 rt-thread版本&#xff1a;V5 开发板&#xff1a;雅特力AT32F437 AT-START-F437 二、ENV配置 E…

java--类变量与实例变量--实验设计--村庄种树

目录 设计要求 设计流程图 程序代码 类Village代码 类MainClass代码 可以直接运行的代码 运行结果 类变量与实例变量的区别和类方法与实例方法的区别 idea的详细使用方法 设计要求 编写程序模拟两个村庄共同拥有一片森林&#xff1b;编写一个Village类&#xff0c;该类…

python爬虫:爬取网站所有页面上某些内容

举例场景&#xff1a;爬取腾讯课堂中&#xff0c;查询python的所有课程的封面图、课程标题、课程数量、课程价格&#xff0c;这4个部分的内容。 代码如下&#xff1a; import requests # import lxml # 导入用于请求的包lxml from bs4 import BeautifulSoup # 导入用于请求…

Tomcat 8.5 环境搭建指南

文章目录 导言环境搭建总结 导言 欢迎阅读本篇博客&#xff0c;本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南。Tomcat是一个流行的开源Java Servlet容器&#xff0c;它提供了一个运行Java Web应用程序的平台。无论您是新手还是有经验的开发人员&#xff0c;本文都将帮…

4、架构:Canvas VS DOM

在可视化搭建的低代码平台中&#xff0c;设计器是一个非常关键的模块&#xff0c;可以帮助用户通过拖拽、配置等方式快速搭建应用界面。 在技术选型方面&#xff0c;目前市面上主流的设计器技术包括基于 HTML/CSS/JavaScript 的 Web 设计器。 在渲染方案方面&#xff0c;主流…

王道《计算机网络》思维导图汇总

第一章 1.1.1 概念与功能 1.1.2 组成与分类 1.1.3 标准化工作及相关组织 1.1.4 性能指标 速率 带宽 吞吐量 时延 时延带宽积 往返时延RTT 利用率 1.2.1 分层结构、协议、接口、服务 1.2.2 OSI参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 1.2.4 TCP/IP 参…

Linux下的分布式迁移工具dsync使用

一、Linux下的分布式迁移工具dsync使用 dsync 是一个在 Linux 系统上用于迁移文件和目录的工具。它可以在不同的存储设备之间进行数据同步和迁移操作。dsync 是 rsync 工具的一个衍生版本&#xff0c;专注于在本地文件系统之间进行数据迁移。 这里是官网&#xff1a;dsync 1、…

游泳买耳机买什么的比较好,列举几款实战性好的游泳耳机

对于运动用户来说&#xff0c;在运动时都会选择听一些节奏感比较强的音乐&#xff0c;让自己运动是更有活力。现在已经是三伏天中的前伏期间&#xff0c;不少人会选择在三伏天的日子里进行减肥瘦身&#xff0c;耳游泳已经成为很多人都首选运动&#xff0c;游泳是非常好的有氧运…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代&#xff0c;软件已经成为我们办公和生活的必备工具。然而&#xff0c;市面上的大部分国产软件都需要付费才能使用&#xff0c;给我们的经济负担增加了不少。幸运的是&#xff0c;国内有一些良心软件&#xff0c;它们质量上乘&#xff0c;功能强大&#xff0c;…

2023牛客网秋招国内大厂最牛的 Java 面试八股文合集(全彩版)

秋收即将来临&#xff0c;找工作的小伙伴比比皆是&#xff0c;很对小伙伴早早的就开始储备技术&#xff0c;准备秋招面试了。 为了帮助小伙伴更好的应对面试&#xff0c;我拉来十几个大佬&#xff0c;汇总一线大厂的情况&#xff0c;给你整了一套超全的面试资料&#xff1a; 16…

深度学习项目实战二: LetNet5网络结构搭建

深度学习项目实战二: LetNet5网络结构搭建 文章目录 深度学习项目实战二: LetNet5网络结构搭建@[TOC](文章目录)一、卷积基本运算公式二、LetNet5网络1. 网络结构![在这里插入图片描述](https://img-blog.csdnimg.cn/0008fe6e5886414eac09eed49556ad99.png)2. 导入相关包3. 代码…

熔断与降级 Hystrix

一、Hystrix(豪猪)简介 1、Hystrix的设计目的 &#xff08;1&#xff09;对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 &#xff08;2&#xff09;阻止某一个依赖服务的故障在整个系统中蔓延&#xff0c;服务A->服务B->服务C&#xff0c;服务C故障了…

四、交换网络实验4——单臂路由配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.4 配置单臂路由器 实验目的 学习配置单臂路由 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统 实验步骤 第一步:根据拓扑配置基本信息

【Linux修炼】开发工具使用

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

无人机遥感在农林信息提取中的实现方法与GIS融合制图教程

详情点击链接&#xff1a;无人机遥感在农林信息提取中的实现方法与GIS融合制图 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势&#xff0c;是智慧农业必须采用的重…

Vue指令案例

案例需求&#xff1a; 将Vue数据模型中的数据以表格的形式渲染展示 具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-wid…

《MySQL》对表进行操作(DDL语句)

文章目录 &#x1f4a1;创建表&#x1f4a1;修改表&#x1f4a1;删除表 在了解下列语句前&#xff0c;先掌握一下指令 # 查看表内容 desc [表名] # 详细查看表内容 show create table [表名] \G&#x1f4a1;创建表 # 创建表 create table [表名] ([字段1] [类型1],[字段2] […

ChatGPT实战:高考志愿填报

近期&#xff0c;随着各地陆续发布高考成绩&#xff0c;高考志愿填报市场随之升温&#xff0c;“高报师”再次成为“香饽饽”。填报志愿对中学生来说太难&#xff0c;在一个懵懂的年纪做这样一个决策&#xff0c;份量是比较重的。当普通人没很多的信息做参考的时候&#xff0c;…

pytorch快速入门中文——01

PyTorch 深度学习&#xff1a;60分钟快速入门 原文&#xff1a;https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html 作者&#xff1a; Soumith Chintala https://www.youtube.com/embed/u7x8RXwLKcA 什么是 PyTorch&#xff1f; PyTorch 是基于以下两个…

Linux历史及环境搭建(VMware搭建CentOS7环境以及使用XShell连接Vmware)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机2.5 使用XShell连接VMware 结语 1.Linux历史 在这里简要介绍Linux的发展…