【SpringBoot】日志是什么+基于lombok的日志输出

  • 博主简介:想进大厂的打工人
  • 博主主页:@xyk:
  • 所属专栏: JavaEE进阶 

在我们日常的程序开发中,日志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。本文会讲解SpringBoot中日志普通用法和基于 lombok 的日志打印~


目录

文章目录

一、日志是什么?

二、日志文件的基本使用

2.1 SpringBoot项目中的日志

2.2 自定义日志打印

三、日志级别

3.1 日志级别的作用

3.2 日志级别的分类

3.3 日志级别的设置

四、日志持久化

五、基于lombok的日志输出

5.1 lombok 日志输出步骤 

5.2 简单介绍 lombok 原理


一、日志是什么?

日志是程序的组成部分,日志文件是一种记录计算机系统或者应用程序运行状态和活动的文件。日志文件包含程序中运行的错误,系统的操作人,程序的执行时间,后端代码sql的执行情况等,日志文件可以在本地存储,也可以通过远程服务器进行集中存储和分析。

总的来说,日志就是帮助程序猿来发现问题并定位问题,方便后续的维护和纠错~

二、日志文件的基本使用

2.1 SpringBoot项目中的日志

Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:

通过上述⽇志信息我们能发现以下 3 个问题:

  1. Spring Boot 内置了⽇志框架(不然也输出不了⽇志)。
  2. 默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打印⽇志呢?
  3. ⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?

下面我们来揭秘~

2.2 自定义日志打印

自定义日志打印主要步骤如下:

  1. 获取日志对象
  2. 使用日志对象的相关方法输出要打印的内容

获取日志对象
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory,代码如下:

 // 1. 得到日志对象private static final Logger logger = LoggerFactory.getLogger(UserController.class);

其中,getLogger方法需要传入当前类,用于说明日志归属类,便于我们更加直观的定位到问题类。同时,需要注意的是,Logger 对象属于 org.slf4j 包下。

使用日志对象打印日志
日志对象的打印方法有很多,示例代码如下:

@RequestMapping("/user")
@Controller
@ResponseBody // 用来设置当前类中所有的方法返回的是数据而非页面
public class UserController {// 1. 得到日志对象private static final Logger logger = LoggerFactory.getLogger(UserController.class);@RequestMapping("/hi")public String sayHi(){// 写日志logger.trace("我是 trace");logger.debug("我是 debug");logger.info("我是 info");logger.warn("我是 warn");logger.error("我是 error");return "Hi,Spring Boot";}}

实现效果: 

可以看到,使用了 5 种不同的方法打印日志信息,一条日志信息包含时间、日志的级别、线程ID、线程名称、日志归属的包和类以及日志的内容。但是这里之所以能打印五条日志,是因为我在配置文件中设置了全局的日志级别;正常情况下,打印出来的只有三种。

三、日志级别

3.1 日志级别的作用

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

3.2 日志级别的分类

日志的级别分为:

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

实际中,我们能自定义的只有前5个,而致命级别的日志,会在代码异常导致程序退出时执行。日志级别的顺序如下图所示:

越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了

3.3 日志级别的设置

日志级别的设置,只需要在配置文件中设置 logging.level 配置项即可。(.yml配置文件)

配置根路径的日志级别:

# 日志级别设置
logging:level:root: error

可见,全局设置成 error之后,所有的日志都不会出现了,因为日志默认级别为info ~

在根路径日志级别的基础上配置子目录日志级别

logging:level:root: errorcom:example:springbootdemo:controller: traceservice: info

设置其他的类中,日志是根据自身设置级别来打印的哦~

四、日志持久化

到这里,我们已经了解到如何自定义日志打印以及如何设置日志级别。但是还遗留了一个致命性的问题:日志信息是输出在控制台的,如果重新启动项目,控制台的信息不就消失了吗?有没有什么方法能够将日志信息保存起来,方便以后查看呢?

在生产环境中,我们常常把日志信息保存下来。而将日志信息保存下来的过程就叫做日志持久化。想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。

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

# 设置日志
logging:file:path: C:\\logs

 配置日志文件的文件名:

# 设置日志
logging:file:path: C:\\logsname: spring-logs

五、基于lombok的日志输出

5.1 lombok 日志输出步骤 

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

  1. 添加 lombok 框架⽀持
  2. 使⽤ @slf4j 注解输出⽇志
     
        <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

使⽤ @slf4j 注解输出⽇志:

@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {@RequestMapping("/hi")public String sayHi(){log.trace("我是 Slf4j trace");log.debug("我是 Slf4j debug");log.info("我是 Slf4j info");return "Hi,Article";}
}

5.2 简单介绍 lombok 原理

lombok 能够打印⽇志的秘密就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如下:

可见,@slf4j 注解,实质上就是帮助我们进行了 log 对象的创建,我们只需要使用 log 对象即可~还是很香的把~~

Lombok 在编译期间生成代码,而不是在运行时生成。 Lombok 的使用可以节省开发者在编写 Java 代码时的时间和精力,并且可以让代码更加简洁易懂。

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

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

相关文章

【华秋推荐】新能源汽车中的T-BOX系统,你了解多少?

近几年&#xff0c;新能源汽车产业进入了加速发展的阶段。我国的新能源汽车产业&#xff0c;经过多年的持续努力&#xff0c;技术水平显著提升、产业体系日趋完善、企业竞争力大幅增强&#xff0c;呈现市场规模、发展质量“双提升”的良好局面。同时&#xff0c;通过国家多年来…

TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

导读&#xff1a; 前面章节&#xff0c;我们讲到过 接口&#xff08;Interface&#xff09;可以用于对「对象的形状&#xff08;Shape&#xff09;」进行描述。 本章节主要介绍接口的另一个用途&#xff0c;对类的一部分行为进行抽象。 类配合实现接口 实现&#xff08;impleme…

VR全景在建筑工程行业能起到哪些作用?

在建筑工程领域&#xff0c;数字化技术为行业的发展起到巨大的推动作用&#xff0c;虽然建筑施工行业主要是依赖于工人劳动力和施工设备&#xff0c;但是VR全景在该行业中方方面面都能应用&#xff0c;从设计建模到项目交付&#xff0c;帮助建筑师以及项目方更好的理解每个环节…

斗象科技-2023攻防演练必修高危漏洞集合下载(2个版本)

高危风险漏洞一直是企业网络安全防护的薄弱点&#xff0c;也成为HW 攻防演练期间 红队的重要突破口&#xff1b;每年HW 期间爆发了大量的高危风险漏洞成为红队突破网络 边界防护的一把利器&#xff0c;很多企业因为这些高危漏洞而导致整个防御体系被突破、 甚至靶标失守而遗憾出…

photoshop生成器引入到electron项目(electron与photoshop建立通信)

Photoshop引入了nodejs&#xff0c;在启动的时候&#xff0c;通过pipe调起nodejs运行时核心generator-builtin&#xff0c;通过KLVR机制与ps进行通信和交互&#xff0c;同时会加载用户编写的扩展。 这里记录一下引入时的踩坑过程 generator-core就是它的源码&#xff0c;elect…

Unity 编辑器资源导入处理函数 OnPreprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPreprocessAudio 用法 点击封面跳转下载页面 简介 在 Unity 中&#xff0c;资源导入是一个非常重要的环节&#xff0c;它决定了资源在项目中的使用方式和效果。Unity 提供了一系列的资源导入处理函数&#xff0c;其中之一就是 OnPreprocessAud…

Qt应用开发(基础篇)——拆分器窗口 QSplitter

一、前言 QSplitter继承于QFrame&#xff0c;QFrame继承于QWidget&#xff0c;是Qt的一个基础工具类。 框架类QFrame介绍 QSplitter拆分器&#xff0c;用户通过拖动子部件之间的边界来控制子部件的大小&#xff0c;在应用开发中数据分模块展示、图片展示等场景下使用。 二、QSp…

【金融量化】对企业进行估值的方法有哪些?

估值的方法有哪些&#xff1f; 如何对企业进行估值&#xff1f;有2个方法估算。 1 绝对估值法 它是一种定价模型&#xff0c;用于计算企业的内在价值。 比如说你可以根据公司近N年的现金流情况。借此去预测未来N年的现金流情况。所有的现金流数据都可以在年报上查询到。最后…

ip地址怎么改 手机ip地址怎么修改

IP地址是指互联网协议地址&#xff0c;是给互联网上的每台设备分配的一个唯一的标识符。改变IP地址是在一定的条件下&#xff0c;为了实现一些特定的目的而对设备的网络配置进行调整。下面将介绍一些常见的改变IP地址的方法。我们可以通过重启路由器或者计算机来更改IP地址。在…

那些年的Android开发经验记录

Android Studio 新版Logcat 从惊艳到放弃 AS总算更新了这个logcat了&#xff0c;原来的logcat真是使用起来贼难受&#xff0c;动不动过滤就失效&#xff0c;或者日志不打印&#xff0c;新版的logcat初步使用下来&#xff0c;那是贼舒服&#xff0c;先上一张界面图 一眼看…

柜柜软件报价单滑动闪屏解决办法

柜柜下载地址:家具设计软件免费下载-家居设计软件手机版下载-柜柜App官网 出现的问题现象: 原因:笔记本使用的集成显卡,切换到独立显卡即可解决 异常修复.

shell脚本条件测试语句,if,case

shell脚本条件测试语句&#xff0c;if&#xff0c;case 一.条件测试1.1test命令1.2文件测试1.2.1文件测试常见选项 1.3数值比较1.4字符串比较1.5逻辑测试 二.if语句2.1单分支结构2.3多分支 三.case语句 一.条件测试 1.1test命令 测试特定的表达式是否成立&#xff0c;当条件成…

嵌入式是大坑吗?

嵌入式不是坑&#xff0c;但里面遍地是坑。一不小心&#xff0c;你就会掉进去。 嵌入式覆盖的范围太广&#xff0c;低端的产品太多。 单片机叫嵌入式&#xff0c;开发板叫嵌入式&#xff0c;摄像头叫嵌入式&#xff0c;手机、平板电脑、通讯基站、无人机、机器人、自动驾驶汽…

PEFD-多投影蒸馏详细论文与代码解读(Improved Feature Distillation via Projector Ensemble)

论文链接&#xff1a;https://papers.nips.cc/paper_files/paper/2022/file/4ec0b6648bdf487a2f1c815924339022-Paper-Conference.pdf 源码链接&#xff1a;https://github.com/chenyd7/PEFD 文章目录 前言一、论文核心二、论文摘要三、论文内容四、集成投影方法五、源码环境安…

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

Java基础入门篇——修饰符

在Java中&#xff0c;修饰符&#xff08;Modifiers&#xff09;是一种用于修改类、方法、变量和其他实体的访问权限、行为或特性的关键字。Java提供了一组修饰符&#xff0c;可以用于实现对代码的封装、继承、多态和访问控制等功能。 1、访问修饰符&#xff08;Access Modifie…

使用雅克比矩阵计算Rossler映射的lyapunov exponent图谱

Rossler映射如下: matlab代码如下: clear;%% ===========初始化输入============== yinit = [0.1,0.1,0.1]; orthmatrix = [1 0 0;0 1 0;0 0 1];y = zeros(12,1); y(1:3) = yinit; y(4:12) = orthmatrix;mod = zeros(3,1); lp = zeros(3,1);%% ============迭代控制=======…

基于Spring Boot的招聘网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的招聘网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot框…

手把手教你搭建私服(Nexus)

私服是一台独立的服务器&#xff0c;用于解决团队内部的资源共享与资源同步问题。 1.Nexus Nexus是sonatype公司的一款maven私服产品。 1.1 下载地址 https://help.sonatype.com/repomanager3/product-information/download1.2 启动 nexus.exe /run nexus1.3 访问 & 登…

自动驾驶传感器选型

360的场景&#xff0c;避免有盲区&#xff0c;长距离 Lidar&#xff08;激光雷达&#xff09; 典型特点一圈一圈的&#xff0c;轮廓和很高的位置精度 禾赛的机械雷达 速腾的固态雷达 固态雷达是车规级的&#xff0c;车规级的意思是可以装到量产车上 Radar&#xff08;毫米…