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

【Java】Spring Boot 日志文件

文章目录

  • SpringBoot日志文件
    • 1. 日志有什么用
    • 2. 日志怎么用
    • 3. 自定义日志打印
      • 3.1 在程序中得到日志对象
      • 3.2 使用日志对象打印日志
    • 4. 日志级别
      • 4.1 日志级别有什么用?
      • 4.2 日志级别的分类与使用
    • 5. 日志持久化
    • 6. 更简单的日志输出--lombok
      • 6.1 添加 lombok 依赖
      • 6.2 输出日志
      • 6.3 lombok原理解释
      • 6.4 lombok更多注解说明
    • 7. 总结

SpringBoot日志文件

1. 日志有什么用

日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗。

日志对于我们来说,最主要的用途就是排除和定位问题。除了发现和定位问题之外,我们还可以通过日志实现以下功能:

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

2. 日志怎么用

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

在这里插入图片描述

通过上述信息我们可以发现:

  • Spring Boot内置了日志框架
  • 默认情况下,输出的日志并不是开发者定义和打印的,那么开发者怎么在程序中定义打印日志?
  • 日志默认是打印在控制台上,而控制台的日志是不能被保存的, 如何将日志永久的保存下来?

3. 自定义日志打印

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

  1. 在程序中得到日志
  2. 使用日志对象的相关语法输出要打印的内容

3.1 在程序中得到日志对象

private static final Logger log = LoggerFactory.getLogger(UserController.class);

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

注意:logger对象属于org.slf4j包下的,不要导错了
在这里插入图片描述

3.2 使用日志对象打印日志

日志对象的打印方法有很多种,我们可以使用info方法来输出日志,

@Controller
@ResponseBody
public class UserController {private static final 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");}
}

在这里插入图片描述

4. 日志级别

4.1 日志级别有什么用?

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

4.2 日志级别的分类与使用

日志级别分为:

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

日志级别的顺序:
在这里插入图片描述

越往上,接收到的信息就越少,如设置了warn就只能接收到warn及其上面的级别

日志级别设置

logging:level:root: error

默认日志输出级别

清除掉配置文件当中的日志设置,观察控制台输出的日志级别

得到结论,日志输出级别默认是info

当存在局部日志级别和全局日志级别设置,那么当访问局部日志时,使用的是局部日志级别。也就是局部日志优先级高于全局日志的优先级

5. 日志持久化

以上的日志都是输出在控制台上,然而生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程叫做持久化

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

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

logging:file:path: D:\rizhi

保存的路径,当中包含转义字符方面的设置我们可以使用这个/来作为分割符。

如果坚持使用Windows下的分割符,我们需要使用\转义字符来转义一下

配置日志文件的文件名:

logging:file:name: D:/rizhi/logger/spring.log

6. 更简单的日志输出–lombok

每次使用LoggerFactory.getLogger很繁琐,且每个类都添加一遍,也很麻烦。这里的lombok是一种更好的日志输出方式

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

6.1 添加 lombok 依赖

首先要安装一个插件:在这里插入图片描述

然后再pom.xml页面右键、在这里插入图片描述在这里插入图片描述
在这里插入图片描述

最后重新添加依赖就可以了
在这里插入图片描述

6.2 输出日志

使用@Slf4j注解,在程序中使用log对象即可输入日志并且只能使用log对象才能输出,这是lombok提供的对象名

6.3 lombok原理解释

lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录我们可以发现:

在这里插入图片描述

这里的@Slf4j注解变成了一个对象。

下面是java程序的运行原理:

在这里插入图片描述

6.4 lombok更多注解说明

基本注解

注解作用
@Getter自动添加get方法
@Setter自动添加set方法
@ToString自动添加toString方法
@EqualsAndHashCode自动添加equals和hasCode方法
@NoArgsConstructor自动添加无参构造方法
@AllArgsConstructor自动添加全属性构造方法,顺序按照属性的定义顺序
@NonNull属性不能为null
@RequiredArgsConstructor自动添加必须属性的构造方法,final + @NonNull的属性为需

组合注解:

注解作用
@Data@Getter+@Setter+EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor

日志注解

注解作用
@Slf4j添加一个名为log的对象

7. 总结

日志是程序员中的重要组成部分,使用日志可以快速的发现和定位问题,Spring Boot提供了日志框架,默认情况下使用的是info日志级别将日志输出到控制台的。我们可以通过lombok提供的@Slf4j注解和log对象快速的打印自定义日志,日志包含了6个级别:

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

日志级别依次提升,而日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存域名或保存目录来将日志永久的保存下来

相关文章:

【Java】Spring Boot 日志文件

文章目录SpringBoot日志文件1. 日志有什么用2. 日志怎么用3. 自定义日志打印3.1 在程序中得到日志对象3.2 使用日志对象打印日志4. 日志级别4.1 日志级别有什么用?4.2 日志级别的分类与使用5. 日志持久化6. 更简单的日志输出--lombok6.1 添加 lombok 依赖6.2 输出日…...

软件项目管理计算题复习(1)

软件项目管理计算题复习(1) 1.关键路径:决定项目最早完成的一系列的活动。网络图中最长的路,最少的时差,总是差为0,也是关键路径。 2.最短路径也是最短工期 3.总时差:最晚开始-最早开始最晚结…...

BMI160 BOSCH/博世 六轴 加速度 陀螺仪 传感器

BMI160 6轴惯性运动传感器,采用MEMS传感器封装,将16位3轴加速度计和超低功耗3轴陀螺仪集成在一起。当加速度计和陀螺仪在全速模式下运行时,耗电典型值低至950A,仅为市场上同类产品耗电量的50%或者更低。 Bosch BMI160专为智能手机…...

ROS探索[wpr_simulation的编译]

遇到的多种挑战最终的解决方式是通过重新删除所有编译文件夹重新生成工程原因如下 第一次生成的catkin_make文件的时候针对环境变量进行了设置,如果不删除环境变量相关的设置则后续新装的工具工程都会受到影响掣肘Protocbuf相关问题系统中存在多个版本的Protocbuf,因此优先级…...

连接Oracle数据库失败(ORA-12514)故障排除

文章目录症状产生原因解决办法欢迎加下方我的微信👇,拉你入学习群点击试看博主的专著《MySQL 8.0运维与优化》(清华大学出版社)ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库…...

DevOps 学习笔记(一) | DevOps 简介及环境搭建

1. 环境配置 本次实验需要三台服务器CI/CD 服务器、应用服务器和Harbor 服务器 DevOps 步骤 程序员将代码 push 到代码仓库Jenkins 根据触发条件拉取代码到CI/CD 服务器Jenkins 使用 Maven 将代码 build 成 jar 包Jenkins 使用 jar 包通过 Dockerfile 和 docker-compose.yml…...

日志收集笔记(Filebeat 日志收集、Logstash 日志过滤)

1 FileBeat Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。 1.1 FileBeat 安装与使用 …...

字节二面,原来是我对自动化测试的理解太浅薄了..

如何使用Python实现自动化测试 如果你入职一家新的公司,领导让你开展自动化测试,作为一个新人,你肯定会手忙脚乱,你会如何落地自动化测试呢?资深测试架构师沉醉将告诉你如何落地自动kan化测试,本次话题主要…...

2023雅虎邮箱不能注册?别急,这份教程教你成功注册雅虎邮箱

这几年,跨境电商的迅猛发展,越来越多人加入这片蓝海,跨境人拥有一个专业的邮箱账户显得尤为重要,它是商业交流和日常工作的必备工具。因此,雅虎邮箱成为了许多人的首选,全球范围内使用雅虎邮箱的人数是非常…...

Elasticsearch 自动补全 completion type

Elasticsearch 自带一种自动补全类型 completion 这种类型不在mapping文档里面有点坑。 先直接上例子。 建立 index,把我们要自动补全的字段设置为 completion 类型 或者直接设置为子类型 PUT /blogs_completion/ {"mappings": {"tech": {"properties…...

GB28181协议实现源码Android源码

一、GB28181规范 尽管在国标GB28181中并没有对“平台”进行明确的定义,但在规范中却多次提到“系统平台”、“管理平台”等词汇,在具体项目中、网络上的交流学习中,平台概念也是无处不在。笔者认为,GB28181平台就是视频联网系统中的上级平台、中间平台或下级平台,用于实现…...

HNU工训中心: 三人表决器及八人抢答器实验报告

工训中心的牛马实验 三人表决器: 实验目的 1) 辨识数字IC功能说明。 2) 测试数字集成门电路,掌握输出故障排除、使用注意事项。 3) 掌握逻辑函数搭建三人表决器。 2.实验资源 HBE硬件基础电路实验箱、万用表 74LS00与非门、74LS10 三个3输入与非门…...

split()用法注意事项

split()用法注意事项 这个要注意有些特殊的分割符,比如.,这个表示匹配任何字符,如果在split()中调用的话,会将任何字符都分隔开,比如: String[] split "se.lll".split("."); System…...

centos7配置静态网络常见问题归纳

系列相似配置与安装软件问题整理与归纳文章目录 安装pymysql库_pymysql库安装_张小鱼༒的博客-CSDN博客 解决pip更新的代码_pip更新代码_张小鱼༒的博客-CSDN博客 python当中的第三方wxPython库的安装解答_pip install wx_张小鱼༒的博客-CSDN博客 spark里面配置jdk后的编程…...

产品经理修炼指南【01】

最近看了点产品经理的书,觉得产品经理这个位置和程序员不太一样,程序员唯一考核的标准就是能不能完成工作任务、是否能完成工作代码,但是产品经理貌似不一样,就像我给刘曼说的,产品经理上可以接领导,下可以…...

NCRE计算机等级考试Python真题(十一)

第十一套试题1、以下选项对于import保留字描述错误的是:A.import可以用于导入函数库或者库中的函数B.可以使用from jieba import lcut 引入 jieba库C.使用import jieba as jb,引入函数库jieba,取别名jbD.使用import jieba 引入jieba库正确答案…...

cglib代理解析

工作原理 使用 <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version></dependency>对类和接口分别进行代理 DemoService package com.fanqiechaodan.user.service;/*** author fa…...

GFD563A101 3BHE046836R0101

GFD563A101 3BHE046836R0101关于高端涂布机张力控制系统方案的介绍高端涂布机张力控制系统方案涂布机是将具有某种功效的胶&#xff0c;或者油墨类物质均匀粘连在塑料薄膜、铝箔、纺织品等表面的机械设备。本系统从放卷到收卷共采用七台变频器&#xff0c;其中收放卷采用闭环张…...

SAP 采购定价过程字段解析

下面我们针对每一个字段进行解释和用途分析 &#xff1a; 1、 步骤&#xff1a;代表了创建PO时&#xff0c;哪个条件类型放到前面&#xff0c;哪个放到后面&#xff0c;如果步骤号相同&#xff0c;那就以谁先选择出来谁就在前面。 2、 计数&#xff1a;没有任何实际意义&a…...

一篇搞懂tcp,http,socket,socket连接池之间的关系

前言 作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼&#xff0c;然而它们之间的关系、区别及原理并不是所有人都能理解清楚&#xff0c;这篇文章就从网络协议基础开始到Socket连接池&#xff0c;一步一步解释他们之…...

【JavaSE】对象的比较

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是Java中自定义类型&#xff08;对象&#xff09;的三种比较方式&#xff0c;equals 方法, Comparable 泛型接口, Comparator 泛型接口 。在日常编程中&#xff0c;我们常常会需要比较的问题&…...

Leetcode DAY 49~50:买卖股票的最佳时机 1 2 3 4

121. 买卖股票的最佳时机 1、贪心算法 class Solution { public:int maxProfit(vector<int>& prices) {//贪心int low INT_MAX;int res 0;for(int i 0; i < prices.size(); i) {low min(low, prices[i]); //左最小价格res max(res, prices[i] - low); //当前…...

Android Handler机制(二) Handler 实现原理

一. 前言 接上一篇文章为什么设计Handler , 我们来继续讲解一下Handler的实现原理, 俗话说一个好汉三个帮, 接下来一步一步引入各个主角,并说明它们在Handler机制中扮演的角色和作用. 二. Handler实现原理 首先我们先确定一个结论: 使用 Handler 是希望它被实例化在哪个线程&a…...

Elasticsearch教程(19) 详解mapping之keyword

Elasticsearch已升级&#xff0c;新版Elasticsearch keyword博客参考下面这篇【Elasticsearch教程8】Mapping字段类型之keyword_elasticsearch的keyword_亚瑟弹琴的博客-CSDN博客 1 前言 本文基于ES7.6&#xff0c;如果是之前版本&#xff0c;是有区别的。 ES支持的字段类型很…...

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录前言时间复杂度1.概述2.大O记法3.常见类型空间复杂度1.概述2.常见类型典型算法的复杂度分析1.递归算法2.哈希表前言 我们知道&#xff0c;研究算法的最终目的就是如何花更少的时间&#xff0c;如何占用更少的内存去完成相同的需求。 时间复杂度 1.概述 我们要计算算…...

Android OpenCV(七十三):吊打高斯模糊的StackBlur Android 实践

前言 OpenCV 4.7.0 2022年12月28日Release,ChangeLog中提到 Stackblur algorithm implementation. Stackblur是一种高斯模糊的快速近似,由Mario Klingemann发明。其计算耗时不会随着kernel size的增大而增加,专为大kernel size的模糊滤波场景量身定制。 使用建议:当kerne…...

4.排序算法之一:冒泡排序

排序算法稳定性假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序列中&#xff0c;r[…...

python自学之《21天学通Python》(16)——第19章 用Pillow库处理图片

Pillow是Python2.X时代比较流行的Python ImagingLibrary&#xff08;简称Pillow&#xff09;图像处理库的分支&#xff0c;并修复了一些bug。Pillow提供了对Python3的支持&#xff0c;为Python3解释器提供了图像处理的功能。和Pillow库一样提供了广泛的文件格式支持、高效的内部…...

发布依赖到maven仓库

maven中央仓库是一个开放的仓库&#xff0c;所以我们也可以把自己开发的jar推送到远程仓库&#xff0c;这样可以直接引入pom依赖使用我们的库。 准备工作 ● 需要一个github账号&#xff08;程序员必备&#xff09; ● 网络代理&#xff08;涉及到的网站通常没版本在国内直接访…...

Laravel-admin之自定义操作日志

laravel-admin是封装性极好的框架&#xff0c;自带的就有操作日志的记录&#xff0c;但是对于非开发人员可能看不懂这个日志&#xff0c;所以就想着给修改一下&#xff0c;以谁修改了什么&#xff0c;谁删除了什么&#xff0c;谁审核了什么&#xff0c;谁添加了什么类似&#x…...

永久免费自助建网站/百度快照网站

状态模式&#xff1a;   允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。其别名为状态对象(Objects for States)&#xff0c;状态模式是一种对象行为型模式。 模式分析&#xff1a;   在很多情况下&#xff0c;一个对象的行为取决于一…...

初学网站开发需要书籍/百度网站收录

汇率换算V1.0 案例描述&#xff1a; 设计一个汇率换算器程序&#xff0c;其功能是将外币换算成人民币&#xff0c;或者相反 案例分析&#xff1a; 分析问题&#xff1a;分析问题的计算部分&#xff1b; 确定问题&#xff1a;将问题划分为输入、处理及输出部分&#xff1b; 设计…...

深圳品牌模板网站建设/哈尔滨新闻头条今日新闻

一、什么是跨域问题 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 如图&#xff1a;我们的vue前端项目的端口号为8081&#xff0c;ssm后端项目的端口号为8080&#xff0c;恭喜你出现跨域问题了&#xff01; 这时&#xff0c;我们可能会想到改…...

西安网站制作的公司/外贸网站建设公司哪家好

用Notepad创建一个文本文件text.txt&#xff0c;其默认编码格式为ANSI&#xff08;乍看之下&#xff0c;还以为是ASCII呢&#xff09;&#xff0c;输入汉字居然不是乱码&#xff1a; 保存为test.txt&#xff0c;发送给你美国的同事Bob。他也用Notepad&#xff0c;不幸的是&…...

有没有做淘宝客网站的/网络推广员是干嘛的

Java设计模式——工厂模式Java设计模式——工厂模式1 概述2 简单工厂模式2.1 结构2.2 实现2.4 优缺点3 工厂方法模式3.1 概念3.2 结构3.3 实现3.4 优缺点4 抽象工厂模式4.1 概念4.2 结构4.2 实现4.3 优缺点4.4 使用场景5 模式扩展6 JDK源码解析-Collection.iterator方法Java设计…...

济南网站建设价格/青岛网站建设方案优化

使用scp 或者 rsync命令在多台Linux服务器之间同步文件时需要输入密码&#xff0c;除了使用expect实现自动化交互以外&#xff0c;还有一种方法就是配置服务器之间ssh免密登录&#xff0c;本文记录一下具体配置过程。 目录1. 创建.ssh目录2. 生成公钥与私钥3. 将公钥追加author…...