SpringBoot日志文件

1.日志有什么用?

日志是程序的重要组成部分,如果程序报错,我们可以通过日志发现和定位问题,同样日志也可以实现以下的功能:

  • 记录用户登录日志,方便分析用户是否是正常登录还是恶意破解用户;
  • 记录系统的操作日志,方便数据恢复和定位操作人;
  • 记录程序的执行时间,方便为以后优化程序提供数据支持。

2.日志怎么用?

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

 通过上面的图,我们发现打印日志的格式:日志打印时间、日志打印级别、线程ID、线程名称、执行类和日志信息。

3.自定义打印日志

开发者自定义打印日志的实现步骤如下:

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

3.1在程序中得到日志对象

@RestController
@RequestMapping("/logger")
public class LoggerController {//1.得到日志的对象private static Logger logger = LoggerFactory.getLogger(LoggerController.class);}

日志工厂需要我们将每个类的类型传递过去,这样我们才知道日志归属类,才能更方便、更直观的定位到问题的类。

注意:Logger对象是属于 org.slf4j 包下的,不要导错包

3.2使用日志对象打印日志

日志对象的打印方式有很多,如下代码所示:

    //2.打印日志@RequestMapping("/log")public void getLog() {String s = "这是一个日志";logger.trace("trace -> " + s);logger.debug("debug -> " + s);logger.info("info -> " + s);logger.warn("warn -> " + s);logger.error("error -> " + s);}

注意我们需要使用URL进行触发才能打印日志。

 4.日志的级别

4.1日志级别的作用

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

4.2日志级别的分类

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试的时候的关键信息的打印;
  • info:普通的打印信息(默认日志级别);
  • warn:警告:不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志;
  • fatal:致命的,因为代码异常导致程序退出执行的时间,只能由程序自身打印,程序员无法打印

 【日志级别的设置】

日志级别设置只需要在配置文件设置"logging.lever"配置项即可

logging:level:root: errorcom.example.demo.controller: info

 root为所有目录都设置成error级别,com.example.controller表示单独这个包下面的级别

5.日志持久化

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

logging:level:root: errorcom.example.demo.controller: info
# 设置日志保存的目录和名字file:path: C:\\Users\\lenovo\Desktopname: C:\\Users\\lenovo\\Desktop\\spring-1024.log

6.更简单的日志输出

每次都是用LoggerFactory.getLogger(xxx.class)很是繁琐,并且在使用的时候每个类都要添加一遍,我们可以使用更简单的方法:

  1. 首先我们添加lombok框架的支持
  2. 使用@slf4j注解输出日志

6.1输出日志

@RestController
@RequestMapping("/logger")
@Slf4j
public class LoggerController {//    //1.得到日志的对象
//    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);//2.打印日志@RequestMapping("/log")public void getLog() {String s = "这是一个日志";log.error("error -> " + s);
//        logger.trace("trace -> " + s);
//        logger.debug("debug -> " + s);
//        logger.info("info -> " + s);
//        logger.warn("warn -> " + s);
//        logger.error("error -> " + s);}}

6.2lombok原理解释

lombok能够打印日志的密码就在targer目录中,target为项目最终执行的代码,我们查看target目录:

 我们发下按@Slf4j被替换成了这行代码。

Lombok的作用如下图所示:

 在编译阶段把注释换成响应的代码并进行编译。

6.3Lombok更过注解说明

注解作用
@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的日志

7.总结

日志用于快速的发现和定位问题,Spring Boot内置了日志的框架,默认情况下使用的日志级别为info,包含6个日志级别:

  • trace
  • debug
  • info
  • warn
  • error
  • fatal

日志的级别越高,日志的信息越少,同时我们可以配置不同文件打印日志的级别,并将日志保存下来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明 我想,任何人都可以尝试从图像中删除背景。当然,有大量可用的软件或工具能够做到这一点,但其中一些可能很昂贵。但是,我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。 如果您是计算机视觉领域的初学者…

okhttp同步和异步请求的简单使用

目录 概述 get请求 post请求 post文件上传 post上传字符串 概述 第一步,app/build.gradle里添加okhttp3的依赖,分为Okhttp,和logging-interceptor // define a BOM and its versionimplementation(platform("com.squareup.okhttp3…

network failed to load response data: no resource with given ide...

Chrome 开发者工具无法显示服务器正常返回的 HTTP 请求 - Failed to load response data 今天做开发时遇到一个问题,Chrome 开发者工具 network 标签里,虽然一个 HTTP 请求已经成功从服务器端返回,但是 Chrome 开发者工具里,仍然…

ArcGIS Engine 与 Visual Studio版本对照表

通过C#对于Arcgis的二次开发,需要Visual Studio版本需要与ArcGIS Engine对应,Visual Studio版本的或高或低都不能使ArcObjects SDK for microsoft.Net framework安装成功。下面是各个版本的对照表。 序号ArcEngine版本visual Studio版本Network版本110.…

Spring 的创建和使用

Spring 就是一个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能 将对象存储到容器(Spring)中; 从容器中将对象取出来 在 Java 语言中对象也叫做 Bean,所以后面咱们再遇到对象就以 Bean 著称 一、创建 …

STM32F405 串口6 485通信

1. 串口初始化函数 void USART6_init(u32 bound) {//GPIO端口设置USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO变量 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AH…

7.react useCallback与useMemo函数使用与常见问题

react useCallback与useMemo函数使用与常见问题 useCallback返回一个可记忆的函数,useMemo返回一个可记忆的值,useCallback只是useMemo的一种特殊形式。 那么这到底是什么意思呢?实际上我们在父子通信的时候,有可能传递的值是一…

实训笔记7.25

实训笔记7.25 7.25笔记一、MapReduce的特殊使用场景1.1 通过MapReduce程序实现多文件Join操作1.1.1 通过在Reduce端实现join操作1.1.2 通过在Map端实现join操作 1.2 MapReduce中的计数器的使用1.2.1 计数器使用两种方式 1.3 MapReduce实现数据清洗 二、MapReduce的OutputFormat…

Linux笔记——搜索命令find、解压缩命令、vi编辑器、用户权限命令、系统信息相关命令讲解

系列文章目录 Linux笔记——磁盘进行分区与挂载介绍 Linux笔记——管道相关命令以及shell编程 Linux笔记——进程管理与网络监控技术讲解​​​​​​ Linux笔记——rpm与yum下载软件命令介绍 文章目录 系列文章目录 准备工作 一 搜索命令—— find 搜索 1.1 目标 1.…

Python基础语法学习

文章目录 基础语法标识符注释行与缩进多行语句获取控制台输入print输出import 与 from...import 基本数据类型布尔类型数字类型字符串列表(List)元组(Tuple)集合(Set)字典(Dictionary) 数据类型转换隐式类型转换显式类型转换 条件控制if 语句match...case 循环语句whilewhile循…

html input 展示隐藏的密码

<!DOCTYPE html> <html> <meta http-equiv"Content-Type" content"text/html;charsetutf-8"/> <body><h2>登录表格</h2><form action"/action_page.php"><div class"container"><…

chrome查看浏览器内核日志

由于经常在网页上调试播放音视频&#xff0c;但是总遇到一些未知原因&#xff0c;导致无法正常播放&#xff0c;亟需查看浏览器内核日志&#xff0c;分析原因&#xff0c;做一下笔记。 (1) 查看浏览器快捷键属性 &#xff08;2&#xff09;在快捷键启动位置补充参数 --enable-…

菜鸡shader:L12 SD处理贴图制作时钟动画

文章目录 SD处理贴图Shader代码C#代码最后效果 SD处理贴图 呃呃感觉这节课&#xff0c;很大一部分都是在将怎么用SD来处理贴图&#xff0c;在这里就简单放一下课上的截图吧&#xff0c;我也跟着做了一下&#xff0c;虽然表盘十二个数排列间隔不一样&#xff0c;但还是稀碎地做…

脉冲频率、转速相关计算(信捷PLC C语言FC编程应用)

转速、线速度、角速度转换和计算关系请查看下面文章链接: 转速/线速度/角速度计算FC_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看…

12.Netty源码之整体架构脉络

Netty 整体架构脉络 Netty 的逻辑处理架构为典型网络分层架构设计&#xff0c;共分为网络通信层、事件调度层、服务编排层&#xff0c;每一层各司其职。 网络通信层 网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O 模型的连接操作。当网络数据读取到内核缓冲…

闲置旧手机搭建服务器?在安卓手机上使用Termux搭建web服务「公网远程访问」

文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的Linux 环境&#xff0c;能够实现Linux下的许多基本操作&#xff0c;不需要root权限Termux就…

docker系列5:docker安装nginx

传送门 前面介绍了docker的安装&#xff1a;docker系列1&#xff1a;docker安装 还有docker镜像加速器&#xff1a;docker系列2&#xff1a;阿里云镜像加速器 以及docker的基本操作&#xff1a; docker系列3&#xff1a;docker镜像基本命令 以及容器的基本命令&#xff1a;…

k8s服务发现之第五弹--使用 Service 连接到应用

Kubernetes 的网络模型 通过前面教程的学习&#xff0c;我们已经可以将容器化的应用程序在 Kubernetes 中运行起来&#xff0c;并且发布到 Kubernetes 内/外的网络上。 通常&#xff0c;Docker 使用一种 host-private 的联网方式&#xff0c;在此情况下&#xff0c;只有两个容…

Go学习 2、程序结构

2、程序结构 2.1 命名 一个名字必须以一个字母或下划线开头&#xff0c;后面可以跟任意数量的字母、数字或下划线。 大写字母和小写字母是不同的。 GO语言有25个关键字&#xff0c;关键字不能用于自定义名字。 还有大约30多个预定义名字&#xff0c;对应内建的常量、类型和函…

【iOS】多界面传值

文章目录 前言一、属性传值二、协议传值三、block传值四、KVO传值五、KVO的自动触发与手动触发六、通知传值总结 前言 在写网易云音乐以及3GShare包括后面的学生管理系统时&#xff0c;用到许多界面传值方法&#xff0c;特撰写博客记录目前学过的几种多界面传值方法 一、属性…