Spring【日志文件的打印与输出】

news2024/11/18 8:48:02

Spring【日志文件的打印与输出】

  • 🍎一.日志文件
    • 🍒1.1 日志的作用
    • 🍒1.2 怎样查看到日志信息
  • 🍎二. 打印日志
    • 🍒2.1 自定义打印日志
    • 🍒2.2 ⽇志格式说明
  • 🍎三.日志级别
    • 🍒3.1 日志级别的作用
    • 🍒3.2 日志级别的分类与使用
    • 🍒3.3 日志级别设置(重要)
  • 🍎四.lombok(简便型日志输出)
    • 🍒4.1 添加 lombok 依赖
    • 🍒4.2 输出⽇志
    • 🍒4.3 lombok工作原理
    • 🍒4.4 lombok常见的注解
  • 🍎五.日志持久化(存储日志到硬盘)

🍎一.日志文件

在这里插入图片描述

🍒1.1 日志的作用

⽇志是程序的重要组成部分它在我们运行检查程序时用来发现和定位问题

除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:
● 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户

● 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈

● 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持

以上这些都是⽇志提供的⾮常实⽤的功能

⽇志真⽤案例:
关键节点上的关键数据⽇志记录举例:例如,⽐抖音,在注册时候不⽌要在抖音添加⼀条⽤户记录,同时也会给抖音极速版添加⼀条⼀模⼀样的⽤户记录,这样做的⽬的是为了实现⼀次注册,多处使⽤的⽬的。不需要⽤户在两边系统注册了,等于在程序中以极低的成本实现的⽤户数据的同步,但这样设计有⼀个致命的问题,⽤户在抖音注册信息的时候,如果抖音挂了,那么⽤户的注册⾏为就会失败?因为⽤户在注册的时候需要同步注册到抖音极速版,但抖音极速版现在挂了,这个时候怎么办呢?

解决方案:
最简单的解决⽅案,抖音在注册的时候,不管抖音极速版是否注册成功,都给⽤户返回成功,那这个时候如果抖音极速版注册失败了怎么办?⾮常简单,如果注册失败了,记录⼀下⽇志,等抖音极速版系统恢复正常之后,把⽇志给抖音极速版的管理⼈员,让他⼿动将注册失败的⽤户同步到抖音极速版,这样就最低成本的解决了问题。这就是⽇志的重要作⽤

🍒1.2 怎样查看到日志信息

其实在我们使用Spring Boot框架运行时我们就已经在控制台中看到了日志的打印
在这里插入图片描述
以上内容就是 Spring Boot 输出的控制台⽇志信息

通过上述⽇志信息我们能发现以下 3 个问题:
●Spring Boot 内置了⽇志框架(不然也输出不了⽇志)

●默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打印⽇志呢?

●⽇志默认是打印在控制台上的,⽽控制台的⽇志(内存)是不能被保存的,那么怎么把⽇志永久的保存下来呢

下⾯我们⼀起来找寻这些问题的答案

🍎二. 打印日志

🍒2.1 自定义打印日志

开发者⾃定义打印⽇志的实现步骤:

●在程序中得到⽇志对象

●使⽤⽇志对象的相关语法输出要打印的内容

注意:Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。到问题类

  private final static Logger log = LoggerFactory.getLogger(类名.class)

⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位

@Controller
@ResponseBody  //动态页面
public class UserController {
    //1. 先得到日志对象(来自 slf4j)
    //通过日志工厂的getLogger()方法获取需要打印日志类中的对象

    private final static Logger log = LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi(){
        log.trace("我是trace 微量级比");
        log.debug("我是 debug 调试日志");
        log.info("我是 info 普通信息日志");
        log.warn("我是 warn 警告日志");
        log.error("我是 error 错误日志");
        // fatal 是导致程序崩坏的(致命bug)程序会自动去打印的
    }
}

我们在网页127.0.0.1:8080/sayhi 之后就可以在控制台看到打印出的日志
在这里插入图片描述

🍒2.2 ⽇志格式说明

在这里插入图片描述
我们发现我们应该在打印台中看到日志的信息只有info warn error 三个级别,这是因为spring boot默认的日志打印级别为info
日志的级别是怎样的呢,记下了我们就要开始认识日志的级别了

🍎三.日志级别

🍒3.1 日志级别的作用

● ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间

● ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求

🍒3.2 日志级别的分类与使用

⽇志的级别分为:

●trace:微量,少许的意思,级别最低

●debug:需要调试时候的关键信息打印

●info:普通的打印信息(默认⽇志级别)

●warn:警告,不影响使⽤,但需要注意的问题

●error:错误信息,级别较⾼的错误⽇志信息

●fatal:致命的,因为代码异常导致程序退出执⾏的事件

在这里插入图片描述
越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了

🍒3.3 日志级别设置(重要)

⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:

# 设置全局日志级别
logging.level.root=info
@Controller
@ResponseBody  //动态页面
public class UserController {
    //1. 先得到日志对象(来自 slf4j)
    //通过日志工厂的getLogger()方法获取需要打印日志类中的对象

    private final static Logger log = LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi(){
        log.trace("我是trace 微量级比");
        log.debug("我是 debug 调试日志");
        log.info("我是 info 普通信息日志");
        log.warn("我是 warn 警告日志");
        log.error("我是 error 错误日志");
        // fatal 是导致程序崩坏的(致命bug)程序会自动去打印的
    }
}

清除掉配置⽂件中的⽇志设置,观察控制台输⼊的⽇志级别,得到以下结论,⽇志的输出级别,默认是 info
在这里插入图片描述

注意日志的定位只能在目录文件中,不能定位到类上
在这里插入图片描述

在这里插入图片描述

🍎四.lombok(简便型日志输出)

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

  1. 添加 lombok 框架⽀持
  2. 使⽤ @slf4j 注解输出⽇志

🍒4.1 添加 lombok 依赖

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

🍒4.2 输出⽇志

@Controller
@ResponseBody
@Slf4j
public class UserService {
//    Logger log = LoggerFactory.getLogger(UserService.class);
    @RequestMapping("/sayhi2")
    public void sayHi2(){
        log.trace("我是 trace");
        log.debug("我是 debug");
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");
    }
}

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

🍒4.3 lombok工作原理

Lombok 的作⽤如下图所示:
lombok通过@Slf4j在运行时会生成一个private final static Logger log = LoggerFactory.getLogger(UserController.class)类似这个对象
在这里插入图片描述

🍒4.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

🍎五.日志持久化(存储日志到硬盘)

以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化.想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了

配置⽇志⽂件的保存路径目录

# 设置日志保存的目录(日志存储大小是24kb,大于会默认生成(1)(2)这种类型名文件)
#logging.file.path=D:/Data/

logging.file.path=D:\\Data\\

配置日志文件的⽂件名


# 设置日志保存的名称
logging.file.name=D:/Data/spring-boot.log

在这里插入图片描述

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

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

相关文章

SpringMVC的收参方式?

第一种收取参数方式&#xff1a;数据类型收取参数 第二种收取参数的方式&#xff1a;实体类收取参数&#xff08;传参&#xff09; 第三种收取参数的方式&#xff1a;ajax 收取数组/集合 第四种收取参数的方式&#xff1a;ajax 接收json数据 第五种收取参数的方式&#xff1a;…

全网最牛最全Postman接口测试(五): postman设置接口关联,postman实现参数化

Postman(9): postman设置接口关联 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这个过程的实现称为关联。 在postman中实现关联操作的步骤如下&#xff1a; 1、利用…

怎样避免软件测试中的漏测

什么是测试漏测&#xff1f; 测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug。我们知道&#xff0c;漏测是每一个软件测试者最头疼的事&#xff0c;一旦出现漏测&#xff0c;首先给客户带来了非常不好的影响&#xff0c;特别是严重的功能性bug被漏测&…

程序员如何创造睡后收入呢?

程序员作为一个互联网行业的职业&#xff0c;在互联网当道的现在是非常吃香的。 作为程序员&#xff0c;一个基础工资的收入就已经是一笔不菲的收益了。 然而&#xff0c;钱总是不够花的&#xff0c;毕竟捂住口袋有点小难。 这时候&#xff0c;我们只好把视线转向另一边&…

算法面试题——删除链表后第N个节点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xff…

C语言百日刷题第十三天

前言 今天是刷题第13天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 临近期末&#xff0c;再刷一套模拟题 C语言百日刷题第十三天前言选择题判断题编程题选择题 1.若由定义int*p1,*p2,m5,n;以下赋值语句都正确的选项是&#xff08;&#xff09; A、p1&m;p2&n…

signintech/gopdf功能介绍与代码示例

signintech/gopdf功能介绍与代码示例 PDF相关常识以及signintech/gopdf功能概览 代码示例&#xff1a; 参考&#xff1a;https://gitee.com/ixuer/gopdf_example 代码示例包括&#xff1a; 设置页面配置&#xff0c;如宽度和高度。test/font: 添加ttf字体&#xff0c;并设置…

计算机毕业设计springboot+vue基本微信小程序的快递收发小程序

项目介绍 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术、springboot框架和微信小程序来完成对系统的设计。整个开发过程首先对…

element-ui的Dropdown下拉菜单,传递多个参数

element-ui的Dropdown下拉菜单&#xff0c;传递多个参数 原因&#xff1a; Dropdown下拉菜单只允许我们传递一个参数 解决步骤: 在允许我们传递一个参数的哪里提前调用方法: 以前&#xff1a;<el-dropdown-item command"a"> 测试 </el-dropdown-item> 现…

一文揭密字节跳动薪资职级,资深测试开发居然能拿......

曾经的互联网是PC的时代&#xff0c;随着智能手机的普及&#xff0c;移动互联网开始飞速崛起。而字节跳动抓住了这波机遇&#xff0c;2015年&#xff0c;字节跳动全面加码短视频&#xff0c;从那以后&#xff0c;抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节逐…

Docker 基础和常用命令总结

一&#xff0c;Docker 简介 1.1&#xff0c;什么是 Docker1.2&#xff0c;Docker 与虚拟机的区别1.3&#xff0c;Docker 架构1.4&#xff0c;为什么用 Docker 二&#xff0c;Docker 基本概念 2.1&#xff0c;镜像2.2&#xff0c;容器2.3&#xff0c;仓库 三&#xff0c;Docker …

【记录】网站变灰色怎么实现?

最近&#xff0c;大家应该注意到了&#xff0c;各大网站和APP都变成灰色了。原因也很简单&#xff0c;一般在清明节、全国哀悼日、大地震的日子、以及一些影响力很大的伟人逝世或纪念日的时候使用&#xff0c;使用后的网站的网页变成灰色(黑白色)&#xff0c;以表示对逝者的悼念…

补贴来了 | 人社部:获得这些证书,国家有补贴

近期&#xff0c;人社部等3部门发布《关于做好失业保险稳岗位提技能防失业工作的通知》&#xff0c;通知提出拓宽技能提升补贴受益范围&#xff1a; 1.领取失业保险金人员取得职业资格证书或职业技能等级证书的&#xff0c; 可按照初级(五级)不超过1000元、中级(四级)不超过150…

流程引擎activiti太难?(看这篇就够了)

一、工作流介绍 1、概念 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使此目标的实现”。 …

[附源码]Python计算机毕业设计Djang基于vuejs的文创产品销售平台app

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

MPLS协议介绍

MPLS介绍 1.MPLS协议概述 MPLS根据自己的标签交换&#xff0c;需要给数据包先写上自己的标签&#xff0c;然后设备才能查看标签之后就转发&#xff0c;此标签是需要在原有的数据包的基础上加进去的&#xff0c;并没有将以前的包头删除&#xff0c;MPLS的标签加在了第二层帧的…

数据仓库规范建设指南

数据仓库规范建设指南 1.数仓公共开发规范 1.1 层次调用规范 稳定业务按照标准的数据流向进行开发&#xff0c;即ODS-> DWD-> DWS-> APP。 非稳定业务或探索性需求&#xff0c;可以遵循ODS-> DWD->APP或者ODS-> DWD-> DWM-> APP 两个模型数据流。 …

国际物流概述:国际物流的流程是什么?

国际运输有很多参与者:航运公司、预订代理、国际货运代理和报关行;本文主要介绍托运人、收货人、国际货运代理和航运公司这四大LCL运输的参与者。从托运人到收货人的货物运输有五个物理流程和两个单证流程&#xff0c;每次装运都需要进行。每个流程都有相关的费用&#xff0c;必…

windows系统安装opencv2.4.12及bug解决

目录前言一、opencv2.4.12安装二、BUG修复1、问题解决&#xff1a;找不到MSVCR100.dll,无法继续执行代码2、问题解决&#xff1a;无法定位程序输入点******于动态链接库opencv_highgui2412.lib上前言 最近在学习CUDA&#xff0c;对照cuda by example一书的例子对照实验&#x…

深入理解Linux网络技术内幕(一)——基础介绍

文章目录前言简介基础术语常见的编码模式内存缓存缓存和hash表引用计数垃圾收集函数指针和虚拟函数表&#xff08;VFT&#xff09;goto语句向量(数组)定义条件指示指令&#xff08;#ifdef及其系列指令&#xff09;条件检查的编译期间最优化互斥主机和网络之间的字节次序转换捕获…