Spring Boot 日志

Spring Boot 日志

​ 在 Spring Boot 里面是有一个内置了的日志框架的,所以才能运行的时候在控制台打印出来。默认情况下的日志是系统定义和打印的,但我们也可以自行自定义打印日志。

日志的好处:

1、发现问题和定位问题;☆(最常见,最实用)

2、记录用户的登录信息,方便大数据分析;

3、记录操作日志,方便追溯操作人;

4、记录方法的执行时间,方便后续程序的优化。

文章目录

  • Spring Boot 日志
    • 一、日志打印
      • 1.1、在程序中得到打印日志的对象
      • 2.1、日志级别
    • 二、在配置里面配置日志 (日志使用)
    • 三、日志持久化
    • 四、更简单的日志输出——lombok
    • 五、lombok原理分析

一、日志打印

在程序中自定义日志

1.1、在程序中得到打印日志的对象

首先需要在程序中使用 日志工厂 LoggerFactory:

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

.getLogger() 里面是当前类,当前类.class

注意:在引用日志工厂的时候需要在 orj.slf4j 这个包下面导入,不要导入错包

image-20230730164405592

使用 slf4j 框架说明:

image-20230730170724763

​ 在 Spring Boot 中 slf4j 相当于一个门面,访问里面的日志实现首先需要通过门面这个渠道才能访问到后面的日志实现。就好比如日常生活需要网购,网购都需要借助平台才能具体的访问到商家进行购物,这里的 slf4j 是一个道理,只有进入 slf4j 这个包才能进行后面一下的操作,具体实现的日志是哪一个这个 Spring Boot 系统自动使用的,默认情况下使用的是 logback。

2.1、日志级别

​ 日志对象打印的方法有很多种,他们每一种都是有级别的,简单理解就是过滤掉冗余不需要的日志,可以自己自定义想看的日志类型方便排查问题,他们级别分别是:

image-20230730173208841

​ 打印的日志内容也是从低到高,就比如说,打印的是 info 级别,那么info 级别->error 级别的日志都会打印出来,后面以此类推。

里面的 fatal 是调用不出来的,因为他直接是致命程序运行不了出现终断退出等现象,不是程序员可以调用的,这个方法是系统里面自己调用的

@Controller
@ResponseBody
public class LoginController {

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

    //localhost:9090/login.html
    @RequestMapping("/login") // url 与前端的 ajax 参数 url 要一致
    public String login(String username, String password) { // SpringBoot可以直接传参自动获得request对象调用getparameter方法
        logger.trace("日志级别 trace");
        logger.debug("日志级别 debug");
        logger.info("日志级别 info");
        logger.warn("日志级别 warn");
        logger.error("日志级别 error");
    }
}

打印日志结果及日志格式说明:

在这里插入图片描述

​ 从日志结果信息来看,日志默认级别是 info ,只有info之后才有日志内容,

总结日志自定义打印:

1、使用 日志工厂 这个对象 LoggerFactory,导包是导 orj.slf4j 这个包;

2、根据这个对象调用方法,调用的方法有5种,就是这个日志级别

二、在配置里面配置日志 (日志使用)

​ 日志的级别配置,只需要在配置文件里面设置 logging.level 即可。

# 配置日志
logging:
  level:
    root: error

这个代码表示,root 在这个项目属于根目录也就是说所有项目目录级别都是配置的 error级别。

logging:
  level:
    root: error
    com:
      example:
        demo:
          controller: info

这个代码表示,在指定路径下的项目程序设置的日志是 info 级别;当 root 和 指定路径同时在的时候优先执行指定的目录。

三、日志持久化

​ 在控制台里面输出的是都不能长期保存,idea 一关日志就没了,但是在之后的生产环境中需要把日志长期保存下来,以便后续可以追溯问题,那么把日志保存下来的过程就叫做持久化。

在yml配置文件里配置日志文件的保存路径:

# 配置日志
logging:
  file:
    path: E:\file # 日志保存路径

​ 这样他就可以在指定的目录生成日志文件了。Spring Boot 就会将控制台的日志写在相应的目录下。

# 配置日志
logging:
  file:
    name: E:\file\spring Boot.log

​ 这是个文件设定名称,可以在保存日志的时候自定义名称,当有多个日志的时候,Spring Boot 它会自动在后面加上数字,非常的方便。

四、更简单的日志输出——lombok

​ Spring Boot 大多数都是可以用注解解决问题的,输出日志也是不例外,之前使用 日志工厂 LoggerFactory.getLogger(xxx.class) ,如果需要多个不同类的日志那么这样添加起来就很麻烦,这里就是用更简单的日志输出方式,使用lombok 提供的注解 @slf4jlog 对象快速的打印自定义日志。

1、首先添加 lombok 的依赖在 pom.xml 中

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

2、使用注解 @Slf4j ,输出日志

@Controller
@ResponseBody
@Slf4j
public class LoginController {

//    private static Logger logger = LoggerFactory.getLogger(LoginController.class);
    @RequestMapping("/login") 
    public String login(String username, String password) { 
        log.trace("日志级别 trace");
        log.debug("日志级别 debug");
        log.info("日志级别 info");
        log.warn("日志级别 warn");
        log.error("日志级别 error");
    }
}

​ 使用了注解就不必再使用日志工厂了,但是程序是使用的 log 对象进行输入日志,并且只有 log 对象才能输出,这是 lombok 提供的对象名。

五、lombok原理分析

​ lombok 的实现原理,它是在 java 整个程序中的编码阶段进行处理的

image-20230731123741147

​ 它在编译的时候生成taget 目录,看看生成字节码的里面的代码

image-20230731124018678

​ 这样就可以说明 lombok 在编译期间的时候把注解 @slf4j 给替换掉了,生成字节码文件的时候又自动把日志厂的对象给编译在代码中。这些都是因为 lombok 通过遵循 jdk 编译期增强的规范,实现了一个 java 源代码在生成字节码的时候的功能增强。其中就比如: @slf4j;@Setter/@Getter …

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/59184.html

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

相关文章

物联网工程开发实施,应该怎么做?

我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 物联网工程的概念 物联网工程是研究物联网系统的规划、设计、实施、管理与维护的工程科学&#xff0c;要求物联网工程技术人员根 据既定的目标&#xff0c;依照国家、行业或企业规范&#xff0c;制定物联网…

NVIDIA 535.86.05 Linux 图形驱动程序改进 Wayland 支持

NVIDIA公司近日发布了适用于 Linux、FreeBSD 和 Solaris 系统的 NVIDIA 535.86.05 图形驱动程序&#xff0c;作为其生产分支的维护更新&#xff0c;解决了各种错误和问题。 NVIDIA 535.86.05 是在 NVIDIA 535.54.03 发布一个多月之后发布的&#xff0c;它通过解决在使用某些 W…

C高级--day3(shell中的输入、命令置换符、数组、算数运算、分支结构)

#!/bin/bash pls ~/ -l | grep "^-" | wc -l qls ~/ -l | grep "^d" | wc -l echo "普通文件个数&#xff1a;$p" echo "目录文件个数&#xff1a;$q"#!/bin/bash read file posexpr index $file \. strexpr substr $file $((pos1)) 2…

Meta AI研究团队新AI模型: Llama 2 大语言模型

Llama是Facebook Research团队开发的基础语言模型集&#xff0c;旨在提供广泛的语言理解能力。它基于转换器架构&#xff0c;参数范围从7B到65B。通过使用Llama模型&#xff0c;研究人员和开发人员可以构建更先进的自然语言处理系统。您可以在GitHub上找到相关的代码和资源&…

SpringBoot复习:(15)Spring容器的核心方法refresh是在哪里被调用的?

在SpringApplication的run方法&#xff1a; refreshContext代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的fresh方法代码如下&#xff1a; 其中调用了super.refresh();而这个super.refresh()就是…

数据结构 | 基本数据结构——队列

目录 一、何谓队列 二、队列抽象数据类型 三、用Python实现队列 四、模拟&#xff1a;传土豆 五、模拟&#xff1a;打印任务 5.1 主要模拟步骤 5.2 Python实现 一、何谓队列 队列是有序集合&#xff0c;添加操作发生在“尾部”&#xff0c;移除操作则发生在“头部”。新…

idea如何加快创建Maven项目的速度

一、下载archetype-catalog.xml 下载archetype-catalog.xml的地址 二、配置 以下所说的配置都指全局配置。 配置Maven -DarchetypeCataloglocal -Dfile.encodinggbk

靶形数独

题目描述 小城和小华都是热爱数学的好学生&#xff0c;最近&#xff0c;他们不约而同地迷上了数独游戏&#xff0c;好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了&#xff0c;于是他们向 Z 博士请教&#xff0c;Z 博士拿出了他最近发明的“靶形数独”&am…

Portraiture 4.0.3 for windows/Mac简体中文版(ps人像磨皮滤镜插件)

Imagenomic Portraiture系列插件作为PS磨皮美白必备插件&#xff0c;可以说是最强&#xff0c;今天它更新到了4.0.3版本。但是全网都没有汉化包&#xff0c;经过几个日夜汉化&#xff0c;终于汉化完成可能是全网首个Portraiture 4的汉化包&#xff0c;请大家体验&#xff0c;有…

Python实现(条形码,二维码)生成识别

Python实现&#xff08;二维码&#xff0c;条形码&#xff09;生成识别 生成条形码生成二维码识别条形码二维码 生成条形码 安装barcode模块: $ pip install python-barcode barcode文档 import barcode from barcode.writer import ImageWriter # 更多了解&#xff1a;https…

验证码安全志:AIGC+集成环境信息信息检测

目录 知己知彼&#xff0c;黑灰产破解验证码的过程 AIGC加持&#xff0c;防范黑灰产的破解 魔高一丈&#xff0c;黑灰产AIGC突破常规验证码 双重防护&#xff0c;保障验证码安全 黑灰产经常采用批量撞库方式登录用户账号&#xff0c;然后进行违法违规操作。 黑灰产将各种方…

HTML,url,unicode编码

目录标题 HTML实体编码urlcode编码unicode编码小结基础例题高级例题 HTML实体编码 实体表示&#xff1a; 以&符号开始&#xff0c;后面跟着一个预定义的实体的名称&#xff0c;或是一个#符号以及字符的十进制数字。 例&#xff1a; <p>hello</p> <!-- 等同…

2、Tomcat介绍(下)

组件分类 在Apache Tomcat中&#xff0c;有几个顶级组件&#xff0c;它们是Tomcat的核心组件&#xff0c;负责整个服务器的运行和管理。这些顶级组件包括&#xff1a; Server(服务器)&#xff1a;Tomcat的server.xml配置文件中的<Server>元素代表整个Tomcat服务器实例。每…

Android 10 解决摄像头预览与实际方向不符问题

问题&#xff1a; 在Android 10中&#xff0c;旋转屏幕方向后&#xff0c;摄像头采集画面的方向&#xff0c;和我们预览的方向是不一致的&#xff0c;该怎么去解决&#xff1f; 当我们旋转屏幕默认为竖屏的时候&#xff0c;进行摄像头旋转采集的数据一般是横向的&#xff0c;而…

DC-2靶机

文章目录 信息收集漏洞发现漏洞利用 DC-2介绍 DC-2环境下载 请注意&#xff0c;您需要将渗透测试设备上的 hosts 文件设置为&#xff1a; 192.168.0.145 dc-2 显然&#xff0c;将 192.168.0.145 替换为 DC-2 的实际 IP 地址。 它将使生活变得更加简单&#xff08;如果没有它&am…

sentinel组件

目录 定义 4.加SentinelResource,blockHander是超过阈值之后执行的函数 5.设置阈值 6.springboot集成sentinel 定义 1.sentinel知道当前流量大小&#xff0c;在浏览器和后端之间加sentinel控制流量&#xff0c;避免大批量的瞬时请求都达到服务上&#xff0c;将服务压垮 2.…

Unity之webgl端通过vue3接入腾讯云联络中心SDK

腾讯云联络中心SDK:云联络中心 Web-SDK 开发指南-文档中心-腾讯云 (tencent.com) 1 首先下载Demo ​ 1.1 对其进行解压 ​ 1.2根据文档操作 查看README.md,根据说明设置server下的dev.js里的相关参数。 然后打开电脑终端&#xff0c;cd到项目的路径&#xff1a; ​ 安装…

C++ 智能指针

C 智能指针 为什么需要智能指针&#xff1f;auto_ptrunique_ptrshared_ptrweak_ptr智能指针的核心实现unique_ptr的简单实现Counter的简单实现share_ptr的简单实现weak_ptr简单实现 shared_ptr的线程安全性多线程无保护读写 shared_ptr 可能出现的问题make_shared()share_ptr/u…

类文件一些内容

1、类加载 将类的字节码加载到JVM中&#xff0c;并转换为可以被JVM运行的数据结构的过程 类文件结构

8月3日上课内容 LNMP精讲

LNMP&#xff1a;目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协作工作的系统和相关文件 能够提供静态页面服务&#xff0c;也可以提供动态web服务。 这是一个缩写 L linux系统&#xff0c;操作系统。 N nginx网站服务&#xff0c;前端&#xff0c;提供前端的静…