Spring Boot 日志文件,你都会了吗?

news/2024/3/29 19:07:08/文章来源:https://blog.csdn.net/CYK_byte/article/details/129116126

目录

1、日志文件的作用

2、日志的使用

2.1、从程序中得到日志对象

2.2、使用日志

2.3、日志格式

3、日志级别

3.1、这样的日志级别有什么用?

3.2、日志级别分类和使用

3.3、日志级别设置

4、日志持久化

5、更简单的日志输出——lombok

5.1、对比

5.2、lombok的实现原理

5.3、lombok更多的注解说明


1、日志文件的作用


  • 程序报错时可以发现并解决问题。
  • 记录用户登录日志,分析用户是否是正常登录。
  • 记录系统操作日志,方便数据恢复和定位操作人。
  • 记录程序执行时间,方便为以后优化程序提供数序支持。

2、日志的使用


2.1、从程序中得到日志对象

例如,在自定义类(假设类名为LogController)中,在程序中使需要使用日志工厂 LoggerFactory 先获取日志对象(日志在程序运行期间只加载一次,并且不可变,需要使用static和final),如下:

    //获取日志对象private static final Logger log = LoggerFactory.getLogger(LogController.class);

Ps:logger 对象是属于 org.slf4j 包下!

2.2、使用日志

日志打印的方式有很多种,例如使用 error 方法,如下:

    //打印日志private void printLog() {log.error("这是一个error");   }

执行效果如下: 

日志里面这些都表示什么意思呢?

接着往下看~

2.3、日志格式

3、日志级别


3.1、这样的日志级别有什么用?

  • 筛选出重要信息,例如在配置文件中设置级别为 warn ,那么你就只能看到warn以及比特级别更高的日志信息了(error、fatal)。
  • 控制不同环境下的日志信息,例如开发环境需要很详细的信息,而生产环境为了性能和安全性就会输入尽量少的日志。

3.2、日志级别分类和使用

日志级别从高到低,如下:

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

3.3、日志级别设置

日志输出的默认级别是 info ,如果想要手动配置,可以在配置配置文件中设置logging.level配置即可,如下:

logging:level:root: error

以上是对所有包下的日志级别有效(root也就是根目录),若想要设置指定某一包下的有效,就需要在level下加上路径(路径以java文件为起始位置),如下:

4、日志持久化


在生产环境下需要将日志信息保留下来,便于出现问题以后容易追溯问题,将日志保存下来这个活动叫做日志持久化。

如何进行日志持久化?我们只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名即可,如下

指定日志的存储目录:

logging:file:path: D:\\test\\testDemo

指定日志文件的文件名:

logging:file:path: D:\\test\\testDemo\\spring-boot-2023.log

Ps:在没有指定文件名两次保存或者指定相同文件名进行两次保存的情况下,第二次保存的日志信息会追加到第一次保存的文件下,而不是覆盖掉上一此保存的日志信息。值得注意的是日志文件的大小一般都有上限(文件太大,有可能导致加载过慢),当然也可以自己手动设置文件大小的上限

5、更简单的日志输出——lombok


5.1、对比

如果不使用lombok,我们创建和使用日志对象需要如下步骤:

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.ResponseBody;@Controller
@ResponseBody //返回的使页面不是文本
public class LogController {//获取日志对象private static final Logger log = LoggerFactory.getLogger(LogController.class);//打印日志@RequestMapping("/hi")private void printLog() {log.error("这是一个error");}}

如果使用lombok,我们创建和使用日志对象需要如下步骤:

a)首先需要添加如下依赖:

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

b)使用lombok:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@ResponseBody
@Slf4j
public class LogEasyController {@RequestMapping("/hi/easy")private void printLog() {log.error("这是一个error");}}

对比图:

5.2、lombok的实现原理

我们的Java程序在IDEA中执行完后,都会编译生成一个target文件,这个文件就是项目最终执行的代码(去掉注释等一系列工作后的文件),那么想要知道lombok的实现原理,就需要去观察这个文件~

 

也就是说lombok的实现原理就是在编译阶段加上了我们原本需要的代码~

Java程序运行原理:

使用Lombok后的Java运行原理:

5.3、lombok更多的注解说明

注解作用
@Getter⾃动添加 getter ⽅法
@Setter动添加 setter ⽅法
@ToString⾃动添加 toString ⽅法
@EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法
@Slf4添加⼀个名为 log 的⽇志,使⽤ slf4j
@NoArgsConstructor⾃动添加⽆参构造⽅法
@AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull属性不能为 null
@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的 属性为必需
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

 

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

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

相关文章

Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)

Linux下安装MySQL8.0的详细步骤 第一步&#xff1a;下载安装配置 第二步&#xff1a;修改密码&#xff0c;并设置远程连接&#xff08;为了可以在别的机器下面连接该mysql&#xff09; 第三步&#xff1a;使用Navicat客户端连接 搞了一台云服务器&#xff0c;首先要干的活就是…

批处理删除指定文件或文件夹

声明&#xff1a;1-2节参考了 https://blog.csdn.net/weixin_43960383/article/details/1243673841. DEL1.1 DEL 的命令参数使用 del 命令能指定文件&#xff0c;Del (erase)[Drive:][Path]FileName指删除指定文件。指定要删除的文件或文件集的位置和名称。语法格式如下&#x…

Unity毛发系统TressFX Exporter

Unity 数字人交流群&#xff1a;296041238 一&#xff1a;在Maya下的TressFX Exporter 插件安装步骤&#xff1a; 1. 下载Maya的TressFX Exporter插件 下载地址&#xff1a;TressFX Exporter 链接&#xff1a;https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…

利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理

如果一幅图像的灰度值集中在某个比较窄的区域&#xff0c;则图像的对比度会显得比较小&#xff0c;不便于对图像的分析和处理。 图像的直方图均衡化可以实现将原图像的灰度值范围扩大&#xff0c;这样图像的对比度就得到了提高&#xff0c;从而方便对图像进行后续的分析和处理…

Cosmos 基础教程(二)-- Run a Node, API, and CLI

有很多不同的方法来运行Cosmos区块链的节点。您将探索如何使用simapp 进行此操作。 1、编译simapp Cosmos SDK存储库包含一个名为 simapp 的文件夹。在这个文件夹中&#xff0c;您可以找到运行Cosmos SDK模拟版本的代码&#xff0c;这样您就可以在不实际与链交互的情况下测试…

化解射频和微波设计挑战的六个技巧

即使是最自信的设计人员&#xff0c;对于射频电路也往往望而却步&#xff0c;因为它会带来巨大的设计挑战&#xff0c;并且需要专业的设计和分析工具。这里将为您介绍六条技巧&#xff0c;来帮助您简化任何射频PCB 设计任务和减轻工作压力&#xff01; 1、保持完好、精确的射频…

由浅入深,一起来刷Java高级开发岗面试指南,面试必定无忧!

前言 我只想面个CV工程师&#xff0c;面试官偏偏让我挑战造火箭工程师&#xff0c;加上今年这个情况更是前后两男&#xff0c;但再难苟且的生活还要继续&#xff0c;饭碗还是要继续找的。在最近的面试中我一直在总结&#xff0c;每次面试回来也都会复盘&#xff0c;下面是我根…

【2022.12.9】Lammps+Python 在计算g6(r)时遇到的问题

目录写在前面绘制g6( r )执行步骤【updated】如何检查图像的正确性&#xff1a;不是编程问题&#xff0c;而是数学问题的一个小bug废稿2则&#xff1a;写在前面 全部log&#xff1a; 【2022.11.16】LammpsPythonMATLAB在绘制维诺图时遇到的问题 绘制g6( r )执行步骤【updated…

面试中经常被问到的【宏定义】,改变你对【C\C++】中宏定义的认识。

最近遇到挺多宏定义的代码&#xff0c;其实挺烦的&#xff0c;每次看复杂的宏定义看到一半就懵了&#xff0c;今天盘一盘它。本篇设计宏定义的原理、使用方法、使用技巧。 目录 一、宏定义原理 二、宏定义定义复杂功能函数 2.1 定义注册函数 三、宏定义实现条件编译 四、宏…

扬帆优配|五千亿巨头一度涨停! 4天3倍,港股又现“狂飙”股!

周一&#xff0c;A股三大指数走势分化。到午间收盘&#xff0c;沪指震荡走高涨近1%&#xff0c;深证成指涨0.75%&#xff0c;创业板指继续弱势调整。 盘面上&#xff0c;钢铁、煤炭、大金融等权重板块团体走强&#xff0c;三大通讯运营商一同拉升&#xff0c;其间我国电信盘中一…

超25亿全球月活,字节依然没有流量

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文|螳螂观察 作者| 搁浅虎鲸 注意看&#xff0c;这个男人叫梁汝波&#xff0c;是字节跳动的联合创始人&#xff0c;也是接棒张一鸣的新任CEO。 在字节跳动十周年之际&#xff0c;他发表了激情昂扬的演讲。“激发创…

linux高级命令之互斥锁

互斥锁学习目标能够知道互斥锁的作用1.互斥锁的概念互斥锁: 对共享数据进行锁定&#xff0c;保证同一时刻只能有一个线程去操作。注意:互斥锁是多个线程一起去抢&#xff0c;抢到锁的线程先执行&#xff0c;没有抢到锁的线程需要等待&#xff0c;等互斥锁使用完释放后&#xff…

02- OpenCV绘制图形及图像算术变换 (OpenCV基础) (机器视觉)

知识重点 OpenCV用的最多的色彩空间是HSV. 方便OpenCV做图像处理img2 img.view() # 浅拷贝img3 img.copy() # 深拷贝split(mat) 分割图像的通道: b, g, r cv2.split(img) # b, g, r 都是数组merge((ch1, ch2, ch3)) 融合多个通道cvtColor(img, colorspace): 颜…

Learning C++ No.11【string类实现】

引言&#xff1a; 北京时间&#xff1a;2023/2/19/8:48&#xff0c;昨天更新了有关进程状态的博客&#xff0c;然后在休息的时候&#xff0c;打开了腾讯视屏&#xff0c;然后看到了了一个电视剧&#xff0c;导致上头&#xff0c;从晚上6点看到了10点&#xff0c;把我宝贵的博客…

【NestJS】中间件

中间件是在路由处理程序之前调用的函数&#xff0c;所以在中间件函数中可以访问请求和响应。 中间件函数需要执行 next() 将控制传递给下一个中间件函数&#xff0c;否则请求会被挂起。 可以使用 nest g mi XXX 创建中间件。 局部中间件 nest g res usernest g mi ajax、编写…

klog bug:仅输出到日志文件,不打印到命令行/stderr

一、 问题描述 开发k8s插件&#xff0c;使用klog作为日志工具&#xff0c;开发完成发现在设置将日志打印到文件后&#xff0c;Error级别的日志信息仍然会输出到命令行&#xff0c;过多日志打印会使后期将服务部署于docker有卡死的风险&#xff08;docker的bug&#xff0c;日志…

kubectl常用的命令

目录 安装 kubectl 一、命令自动补全 二、常用命令 1、查看所有pod列表 2、查看RC和service列表 3、显示Node的详细信息 4、显示Pod的详细信息, 特别是查看Pod无法创建的时候的日志 5、 根据yaml创建资源, apply可以重复执行&#xff0c;create不行 6、基于nginx.yaml…

优思学院:六西格玛中的水平对比方法是什么?

水平对比&#xff0c;就是比较不同事物之间的差异。 这个概念在六西格玛管理中也很重要&#xff0c;也就是我们经常说的标杆管理&#xff0c;经常被用来寻找行业中最好的做法&#xff0c;以帮助组织改进自身的绩效。 在六西格玛管理中&#xff0c;水平对比有三种常见的应用方式…

记一次IDE的Docker插件实战(Dockfile篇)

IDEA下使用Docker插件制作镜像、推送及运行 前言 本部分主要根据IDEA的Docker插件实战(Dockerfile篇)_程序员欣宸的博客-CSDN博客_idea编写dockerfile一文所述内容进行实践&#xff0c;并对其中遇到的问题进行解答&#xff0c;从而串接多个知识点。 如何编写Dockfile 在Int…

【YOLOv5】 3060显卡 GPU版本环境搭建与运行

YOLOv5环境搭建步骤创建虚拟环境使用anaconda新建一个python版本为3.7的虚拟环境查看电脑支持的cuda版本由于30系列的的显卡暂时不支持CUDA11以下版本。因此&#xff0c;这里得安装超过CUDA11.0的版本。通过如下命令来查看可以安装的cuda的版本&#xff1a;conda search cuda安…