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博客
相关文章:
![](https://img-blog.csdnimg.cn/ee26fc2ab5a44c59b1ff0d49ed96acd6.png)
Spring Boot 日志文件
前言 本篇博客主要介绍自定义的日志打印、日志的级别高低、如何保存日志等等..... 一、日志是什么?日志有什么用? 日志就是我们控制台上输出的内容,控制台上的输出的信息就是日志信息,如下所示: 日志有什么用&#x…...
![](https://img-blog.csdnimg.cn/e62ba10bb51a4b4b8953952d8bb03dc6.png)
vulhub venom
文章目录 靶场环境信息收集ftp服务二、信息利用三、任意文件上传三 sudo提权靶场环境 `vmware 靶场信息:https://www.vulnhub.com/entry/venom-1,701/ 下载地址:https://download.vulnhub.com/venom/venom.zip 新建虚拟机打开下载后的ovf文件 遇见导入失败合规性检查时,重试…...
![](https://www.ngui.cc/images/no-images.jpg)
量化交易之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 以…...
![](https://img-blog.csdnimg.cn/85ae9415e0364dda8f545b86380c4479.png)
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…...
![](https://img-blog.csdnimg.cn/0858e8abc4504e75b870b156806d9299.png)
爬虫笔记_
爬虫简介 爬虫初始深入 爬虫在使用场景中的分类 通用爬虫: 抓取系统重要组成部分。抓取的是一整张页面数据 聚焦爬虫: 是建立在通用爬虫的基础上。抓取的是页面中特定的局部内容。 增量式爬虫 监测网站中数据更新的情况。只会抓取网站中最新更新出来的…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring设计模式,事务管理和代理模式的应用
扩充:贝叶斯定理答案见底。 设计模式对关于面向对象问题的具体解决方案. 1,单例多例 在设计单例模式时,要注意两个点 1.构造方法要私有 2.成员变量要私有 3.创建对象所用的方法要被synchronized修饰.(因为方法体中会涉及到判断当…...
![](https://img-blog.csdnimg.cn/d094b90c00c6436e825d2a2ec5f342b7.png)
基于海康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、相关…...
![](https://img-blog.csdnimg.cn/img_convert/b453ac0abc352973476e881bdac679d3.png)
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 …...
![](https://www.ngui.cc/images/no-images.jpg)
python读取图片
要在Python中读取图片,你可以使用第三方库Pillow(Python Imaging Library,PIL)或OpenCV。以下是使用这两个库的示例: 使用Pillow库读取图片: 首先,确保你已经安装了Pillow库。如果还没有安装&am…...
![](https://img-blog.csdnimg.cn/d526fba227d54e9aae596dc4538545d4.png)
虚幻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 …...
![](https://img-blog.csdnimg.cn/de64e8502aae4bf98af20d69c8f2e6ba.png)
Spring面试题22:Spring支持哪些ORM框架?优缺点分别是什么?Spring可以通过哪些方式访问Hibernate?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些ORM框架?优缺点分别是什么? Spring 支持多种 ORM(对象关系映射)框架,其中包括: Hibernate:Hibernate 是一个强大的 ORM 框架…...
![](https://www.ngui.cc/images/no-images.jpg)
流行的Python库numpy及Pandas简要介绍
numpy.ndarray 是NumPy库中的主要数据结构,它是一个多维数组,用于存储和操作数值数据。NumPy是Python中用于数值计算的强大库,numpy.ndarray 是它的核心数据类型,提供了高效的数值运算和广泛的数学函数。 以下是 numpy.ndarray 的…...
![](https://img-blog.csdnimg.cn/94c4d587e68a4f98b5983b55aeceb69d.png)
【二、安装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/ 选哪一个 可以选择第一个࿰…...
![](https://img-blog.csdnimg.cn/510bed509116437c8420150908426bfb.png)
【动手学深度学习-Pytorch版】序列到序列的学习(包含NLP常用的Mask技巧)
序言 这一节是对于“编码器-解码器”模型的实际应用,编码器和解码器架构可以使用长度可变的序列作为输入,并将其转换为固定形状的隐状态(编码器实现)。本小节将使用“fra-eng”数据集(这也是《动手学习深度学习-Pytor…...
![](https://img-blog.csdnimg.cn/7d5ed9143531462da9d6a8c10d000ffe.png)
AUTOSAR 面试知识回顾
如果答不上来,就讲当时做了什么 1. Ethernet基础: 硬件接口: ECU到PHY: data 是MII总线, 寄存器控制是SMI总线【MDCMDIO两根线, half duplex】PHY输出(100BASE-T1): MDI总线,2 wire 【T1: twisted 1 pair …...
![](https://img-blog.csdnimg.cn/7b9356a544d84947a6f7016710012f8f.png)
华为NFC设置教程(门禁卡/公交卡/校园卡等)
今天把华为NFC设置教程分享给大家 出门带门禁卡、校园卡、银行卡、身份证……东西又多,携带又麻烦,还容易搞丢,有没有一种方法可以把它们都装下?有!只要一部手机,出门不带卡包,各种证件&#x…...
![](https://img-blog.csdnimg.cn/e19c71b55c7d4a5ebbfa78c2dabf07f0.png)
基于微信小程序的音乐播放器设计与实现(源码+lw+部署文档+讲解等)
前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...
![](https://img-blog.csdnimg.cn/0470d348b35348888ded1cd230f74779.png)
如何取消显示Notepad++每行显示的CRLF符号
新电脑中重新安装了Nodepad,打开记事本后发现出现了许多黑底的CR|LF标记,特别碍眼。 如何取消呢? 视图 -> 显示符号 -> 取消勾选 显示行尾符操作步骤 预期效果...
![](https://img-blog.csdnimg.cn/994ea1fd68dc459f94ab8dff2970ea0d.png)
数据结构与算法之时间复杂度和空间复杂度(C语言版)
1. 时间复杂度 1.1 概念 简而言之,算法中的基本操作的执行次数,叫做算法的时间复杂度。也就是说,我这个程序执行了多少次,时间复杂度就是多少。 比如下面这段代码的执行次数: void Func1(int N) {int count 0;for…...
![](https://img-blog.csdnimg.cn/e62ecb24753648e1af6fca8943dd0c26.png)
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…...
![](https://img-blog.csdnimg.cn/4360148a565a41adb3b73ada67667beb.png)
C++设计模式_06_Decorator 装饰模式
本篇将会介绍Decorator 装饰模式,它是属于一个新的类别,按照C设计模式_03_模板方法Template Method中介绍的划分为“单一职责”模式。 “单一职责”模式讲的是在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随…...
![](https://img-blog.csdnimg.cn/339df71e7a0d40d6a493564f6bf86189.png)
MySQL 8.0数据库主从搭建和问题处理
错误处理: 在从库通过start slave启动主从复制时出现报错 Last_IO_Error: error connecting to master slaveuser10.115.30.212:3306 - retry-time: 60 retries: 1 message: Authentication plugin caching_sha2_password reported error: Authentication require…...
![](https://img-blog.csdnimg.cn/img_convert/0e8592b365e001b9e920e50677ad7231.jpeg)
公众号迁移多久可以完成?
公众号账号迁移的作用是什么?只能变更主体吗?长期以来,由于部分公众号在注册时,主体不准确的历史原因,或者公众号主体发生合并、分立或业务调整等现实状况,在公众号登记主体不能对应实际运营人的情况下&…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Cloud Stream Kafka(3.2.2版本)使用
问题 正在尝试只用Spring Cloud Stream Kafka。 步骤 配置 spring:cloud:function:definition: project2Building stream:kafka:binder:brokers: xxxx:9002configuration:enable.auto.commit: falsesession.timeout.ms: 30000max.poll.records: 30allow.auto.create.top…...
![](https://www.ngui.cc/images/no-images.jpg)
8位微控制器上的轻量级SM2加密算法实现:C语言详细指南与完整代码解析
引言 在当今的数字化世界中,安全性是每个系统的核心。无论是智能家居、医疗设备还是工业自动化,每个设备都需要确保数据的安全性和完整性。对于许多应用来说,使用高级的微控制器或处理器可能是不切实际的,因为它们可能会增加成本…...
![](https://img-blog.csdnimg.cn/ad0b11caf57040f8bbefe2bd577bcea5.png)
neo4j下载安装配置步骤
目录 一、介绍 简介 Neo4j和JDK版本对应 二、下载 官网下载 直接获取 三、解压缩安装 四、配置环境变量 五、启动测试 一、介绍 简介 Neo4j是一款高性能的图数据库,专门用于存储和处理图形数据。它采用节点、关系和属性的图形结构,非常适用于…...
![](https://img-blog.csdnimg.cn/76328db329e24e15b9d916bfef2094cd.png)
【机组】计算机系统组成课程笔记 第二章 计算机中的信息表示
2.1 无符号数和有符号数 2.1.1 无符号数 没有符号的数,其实就是非负数。在计算机中用字节码表示,目前最常用的是八位和十六位的。 2.1.2 有符号数 将正负符号数字化,0代表 ,1代表 - ,并把代表符号的数字放在有效数…...
![](https://img-blog.csdnimg.cn/5c2623926be44410bd6e87696effdfeb.png)
指针笔试题详解
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…...
![](https://img-blog.csdnimg.cn/a51c6e1d7bda46e6a9d03d7ec3b5bc09.png)
MySQL 日志管理、备份与恢复
目录 1 数据备份的重要性 2 MySQL 日志管理 3 备份类型 3.1 数据备份的分类 3.2 备份方式比较 3.3 合理值区间 3.4 常见的备份方法 4 MySQL 完全备份与恢复 4.1 MySQL 完全备份 5 mysqldump 备份与恢复 5.1 MySQL 完全恢复 6 MySQL 增量备份与恢复 6.1 MySQL 增量…...
![](https://img-blog.csdnimg.cn/5ac4ee9f08a44eb38be64c2ce0af8931.png)
vtk- 数据类型(一) 三角链实例代码
三角链实例代码 #include <iostream> #include <string> #include <regex> #include "tuex.h" #include "vtkCylinderSource.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkRendere…...
![](https://img-blog.csdnimg.cn/20210606221213396.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzU1Mzgw,size_16,color_FFFFFF,t_70)
滨州五学一做考试网站/线上宣传推广方案
国民技术通用MCU N32G452系列芯片简介 产品简介 N32G452系列 (通用基本型) 采用32-bit ARM Cortex-M4内核,支持浮点运算和DSP指令,高达512KB 片内FLASH,144KB SRAM,多达18个数字通讯接口及4个模拟接口,内置10余种密码…...
![](http://www.gbtags.com/gb/networks/uploadimgthumb/72d2a1c5-5bb3-476d-8384-587cd54b5822.png)
广州番禺服装网站建设/学企业管理培训班
这三个函数都是指向函数本身的,call()和apply()的第一参数都是这个函数要执行的上下文对象,之后的参数是这个函数执行要传的参数,不同的地方时call是以枚举的方式传参,apply是以数组的形式传参,当然也可以传递argument…...
![](https://img-blog.csdnimg.cn/img_convert/c698d8157f3cbe7ff8793a7a65583a05.png)
福州专业网站建设/天津百度网站排名优化
lambda表达式含义 函数式接口 1.什么是函数式接口 2.自定义函数 3.作为参数传递Lambda表达式 4.四大内置核心函数式接口 方法引用与构造器引用 方法引用 构造器引用(了解) 数组引用(了解) lambda表达式含义 lambda表达…...
![](http://www.myloadtest.com/resources/google-trends-new-relic-vs-appdynamics.png)
成都网站建设scwbo/陕西网站设计
前: New Relic的上市使得IT和资本界开始重新重视APM,当然跟传统APM相比,New Relic还是有相当的创新,另外还有一点是目前的创业潮导致的企业级需求增大。 In recent years, IT projects seem to have stopped asking “which APM s…...
![](https://img-blog.csdnimg.cn/img_convert/20bf10020e3a0a35f3814433fd5446a9.png)
响应式网站 手机版/如何创建一个个人网站
都说磨刀不误砍柴工,同样学习跟磨刀一样,亦是同样道理。成功都是需要厚积薄发。今天来学习一下Excel表格如何忽略隐藏行或是忽略隐藏列进行求和。一、忽略隐藏行求和例如,以下表格:平时看到这么一个表格,需要给产品汇总…...
![](https://img-blog.csdnimg.cn/img_convert/53242b2460b2f5a36d70671f793738d1.png)
电子邮箱怎么申请/上海seo公司排名
pyse 更名为 seldom WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架,快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方…...