当前位置: 首页 > news >正文

Spring Boot 日志文件

前言

        本篇博客主要介绍自定义的日志打印、日志的级别高低、如何保存日志等等.....

一、日志是什么?日志有什么用?

日志就是我们控制台上输出的内容,控制台上的输出的信息就是日志信息,如下所示:

日志有什么用?

        日志最大的作用就是可以定位和发现问题;除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:

记录⽤户登录⽇志⽅便分析⽤户是正常登录还是恶意破解⽤户

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

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

以上就是⽇志的一些主要功能。

二、自定义日志打印

2.1、能否使用System.out.print来打印日志?

        前面我们说过,日志就是输出在控制台的信息,那么我们自定义日志打印是不是就是直接使用System.out.print来输出信息到控制台呢?我们先来看一下日志包含的各个信息,再来说是否可以直接使用System.out.print来输出。

日志的格式说明: 

        通过这个我们可以看出,打印的日志信息中,时间、打印日志所在的类、日志的具体信息,这些我们都可以在System.out.print中直接输出,但是日志的级别,我们是无法获取的,日志级别也是很重要的,可以在我们排查问题的时候,可以根据日志级别来更快的找到我们所要的信息的。

        还有一点很重要的是,System.out.print打印的信息无法持久化的保存。因此,我们使用System.out.print来打印日志是不合适的。

2.2、使用Logger对象打印日志

        首先我们要在程序中获取⽇志对象需要使⽤⽇志⼯⼚LoggerFactory。接着再通过日志对象打印日志。

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

接下来我们用代码来演示一下:

这里一定得选择slf4j这个包下的Logger类;

到了这里之后,这里会出现两个getLogger方法,这两个方法的区别在于:

一个是传入一个类对象,一个是直接传一个字符串;

传递这个的意义就在于在打印日志时,输出的类所在的位置,当我们传入的是一个字符串时,打印出来的效果就是我们自己设置的位置当我们传入当前类对象的时候,打印出来的效果就是这个类所在的具体位置,从包名到类名,十分详细。因此,这里建议传入一个类对象。

打印日志代码:

package com.example.bloglog.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {private static final Logger log = LoggerFactory.getLogger(TestController.class);@RequestMapping("/sayhi")public String sayHi(){log.trace("trace日志");log.debug("debug日志");log.info("info日志");log.warn("warn日志");log.error("error日志");return "hello";}
}

运行结果: 

        以上代码就是最基本的自定义日志打印的代码了,但是这里我们预计是输出五个日志都打印,但是这里只打印了后面的三个日志;这里就涉及到日志级别及日志级别的问题了。

三、日志级别 

日志总的来说:可以分为六个级别,分别是:

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

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

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

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

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

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

日志级从高到底排序图: 

日志默认级别的设置:如下所示:只需要设置logging.level,root=xxx(设置日志级别)即可

        以下代码我们是设置了日志级别为trace,代表的就是trace及以上的日志就会输出,如果不设置的话,默认的日志级别就是info,只有大于等于info级别的日志才会输出。

四、日志持久化保存 

        我们在生产环境上的日志是需要保存下来的,因为一旦在生产环境下出现了什么问题,我们才可以通过日志来进行分析问题,进而才能更快更好的解决问题。

        日志的持久化保存我们需要设置的东西有两个,一个是日志文件的名称,一个是日志文件的保存位置。

4.1、使用logging.file.path设置日志路径

对于设置日志的保存位置及日志的名称,我们需要在配置文件中进行设置,设置的代码如下:

        使用logging.file.path设置来保存的路径,但是这个方法设置不了日志的文件名,只能设置日志保存的位置;运行之后产生的日志文件如下所示:默认的日志文件名就是spring.log

        

4.2、使用logging.file.name设置日志保存位置及名称 

        我们还可以使用logging.file.name来设置,使用这个方法设置我们不仅可以设置日志的保存位置,还可以设置日志名称。设置代码如下所示:

运行后产生的文件如下:这时候我们就可以设置日志名称和位置了

        当我们使用logging.file.name设置了日志文件名称之后,不设置保存路径,默认会保存到当前项目的路径下。如下所示:

4.3、能不能使用logging.file.path设置日志保存位置再使用logging.file.name来设置日志保存名称?

        答案是:不可以,因为当这两个属性一起出现时,会以logging.file.name为主,就不会再去看logging.file.path的设置了,如果这时候logging.file.name中没设置路径的话,就会直接保存到当前项目的路径下。如下所示:

4.4、关于 logging.file.path与logging.file.name的总结

对于logging.file.name和logging.file.path的使用我们只需要记住以下三点规则:

1.logging.file.path只能设置日志保存的位置,不能设置日志保存名称;

2.logging.file.name既可以设置日志保存位置+名称,但是不能单独设置日志保存的位置;

3.当logging.file.name和logging.file.path一起使用时,会以logging.file.name的设置为主,logging.file.path中的设置不生效。

        还有一个需要特别注意的就是:当我们只使用了logging.file.name并且只设置了日志的保存位置时,没有设置日志的名称时,即使这时候也使用logging.file.path设置路径了,日志都是不会保存的!!!如下所示:

五、使用Lombok更简单的打印日志

        我们前面的自定义日志输出,需要在每一个类中都去从日志工厂获取一个日志对象,而且在选择LoggerFactory的时候还需要特别注意,一不小心就会选错,选成其他包下面的,因此这还是比较麻烦的。这里我们就可以直接使用Lombok来获取日志对象,这样子不仅不容易出错,而且还更简单。代码如下所示:

至于如何在IDEA中安装使用Lombok,可以看这篇博客☞ Spring执行流程及Bean的作用域与生命周期_小白学编程~的博客-CSDN博客

相关文章:

Spring Boot 日志文件

前言 本篇博客主要介绍自定义的日志打印、日志的级别高低、如何保存日志等等..... 一、日志是什么?日志有什么用? 日志就是我们控制台上输出的内容,控制台上的输出的信息就是日志信息,如下所示: 日志有什么用&#x…...

vulhub venom

文章目录 靶场环境信息收集ftp服务二、信息利用三、任意文件上传三 sudo提权靶场环境 `vmware 靶场信息:https://www.vulnhub.com/entry/venom-1,701/ 下载地址:https://download.vulnhub.com/venom/venom.zip 新建虚拟机打开下载后的ovf文件 遇见导入失败合规性检查时,重试…...

量化交易之One Piece篇 - linux - 定时任务(重启服务器、执行程序、验证)

linux 执行命令: crontab -e 0 5 * * 1-5 sudo /sbin/shutdown -r now 0 17 * * 1-5 sudo /sbin/shutdown -r now 45 8 * * 1-5 cd /home/ubuntu/onepiece/bin/datacore && ./datacore 45 20 * * 1-5 cd /home/ubuntu/onepiece/bin/datacore && ./datacore 以…...

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例 第23章 多功能文档查看器实例23.1. 简介23.2. 界面与程序框架设计23.2.1. 图片资源23.2.2. 网页资源23.2.3. 测试用文件 23.3 主程序代码框架23.4 浏览网页功能实现23.4.1 实现HtmIHandler处理器 23.5. 部分代码实现23.5…...

爬虫笔记_

爬虫简介 爬虫初始深入 爬虫在使用场景中的分类 通用爬虫: 抓取系统重要组成部分。抓取的是一整张页面数据 聚焦爬虫: 是建立在通用爬虫的基础上。抓取的是页面中特定的局部内容。 增量式爬虫 监测网站中数据更新的情况。只会抓取网站中最新更新出来的…...

Spring设计模式,事务管理和代理模式的应用

扩充:贝叶斯定理答案见底。 设计模式对关于面向对象问题的具体解决方案. 1,单例多例 在设计单例模式时,要注意两个点 1.构造方法要私有 2.成员变量要私有 3.创建对象所用的方法要被synchronized修饰.(因为方法体中会涉及到判断当…...

基于海康Ehome/ISUP接入到LiveNVR实现海康摄像头、录像机视频统一汇聚,做到物联网无插件直播回放和控制

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…...

Linux下git安装及使用

Linux下Git使用 1. git的安装 sudo apt install git安装完,使用git --version查看git版本 2. 配置git git config --global user.name "Your Name“ ##配置用户 git config --global user.email emailexample.com ##配置邮箱git config --global --list …...

python读取图片

要在Python中读取图片,你可以使用第三方库Pillow(Python Imaging Library,PIL)或OpenCV。以下是使用这两个库的示例: 使用Pillow库读取图片: 首先,确保你已经安装了Pillow库。如果还没有安装&am…...

虚幻4学习笔记(15)读档 和存档 的实现

虚幻4学习笔记 读档存档 B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732 读档 添加UI蓝图 SaveGame_UMG 添加Scroll Box 修改Scrollbar Thickness滚动条厚度 15 15 勾选 is variable 添加text 读档界面 添加背景模糊 添加UI蓝图 SaveGame_Slot …...

Spring面试题22:Spring支持哪些ORM框架?优缺点分别是什么?Spring可以通过哪些方式访问Hibernate?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些ORM框架?优缺点分别是什么? Spring 支持多种 ORM(对象关系映射)框架,其中包括: Hibernate:Hibernate 是一个强大的 ORM 框架…...

流行的Python库numpy及Pandas简要介绍

numpy.ndarray 是NumPy库中的主要数据结构,它是一个多维数组,用于存储和操作数值数据。NumPy是Python中用于数值计算的强大库,numpy.ndarray 是它的核心数据类型,提供了高效的数值运算和广泛的数学函数。 以下是 numpy.ndarray 的…...

【二、安装centOS】

下载 地址:https://mirrors.aliyun.com/centos/ 地址 1、https://mirrors.aliyun.com/centos/7.9.2009/ 2、https://mirrors.aliyun.com/centos/7.9.2009/isos/ 3、https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 选哪一个 可以选择第一个&#xff0…...

【动手学深度学习-Pytorch版】序列到序列的学习(包含NLP常用的Mask技巧)

序言 这一节是对于“编码器-解码器”模型的实际应用,编码器和解码器架构可以使用长度可变的序列作为输入,并将其转换为固定形状的隐状态(编码器实现)。本小节将使用“fra-eng”数据集(这也是《动手学习深度学习-Pytor…...

AUTOSAR 面试知识回顾

如果答不上来,就讲当时做了什么 1. Ethernet基础: 硬件接口: ECU到PHY: data 是MII总线, 寄存器控制是SMI总线【MDCMDIO两根线, half duplex】PHY输出(100BASE-T1): MDI总线,2 wire 【T1: twisted 1 pair …...

华为NFC设置教程(门禁卡/公交卡/校园卡等)

今天把华为NFC设置教程分享给大家 出门带门禁卡、校园卡、银行卡、身份证……东西又多,携带又麻烦,还容易搞丢,有没有一种方法可以把它们都装下?有!只要一部手机,出门不带卡包,各种证件&#x…...

基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...

如何取消显示Notepad++每行显示的CRLF符号

新电脑中重新安装了Nodepad,打开记事本后发现出现了许多黑底的CR|LF标记,特别碍眼。 如何取消呢? 视图 -> 显示符号 -> 取消勾选 显示行尾符操作步骤 预期效果...

数据结构与算法之时间复杂度和空间复杂度(C语言版)

1. 时间复杂度 1.1 概念 简而言之,算法中的基本操作的执行次数,叫做算法的时间复杂度。也就是说,我这个程序执行了多少次,时间复杂度就是多少。 比如下面这段代码的执行次数: void Func1(int N) {int count 0;for…...

TLS/SSL(十) session缓存、ticket 票据、TLS 1.3的0-RTT

一 TLS优化手段 TLS 为了提升握手速度而提出优化手段,主要是减少TLS握手中RTT消耗的时间关于session cache和session ticket,nginx关于ssl握手的地方都有影子 [指令] https面经 ① session 缓存 resume: 重用,复用 案例: 第二次访问www.baidu.com 说明&#x…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...