【Spring框架全系列】SpringBoot配置日志文件

news/2024/11/24 12:45:56/

🍧🍧哈喽,大家好,我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作,本篇博客我们将学习一个新的知识点,SpringBoot日志文件。🖥🖥

📲目录

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

二、如何看到日志文件?

三、如何自定义日志打印

1、在程序中得到⽇志对象

2、使用日志对象提供的内置方法来打印日志

四、日志级别

1、日志级别有什么作用?

2、日志的级别分类;

3、日志级别的设置

4、日志持久化

五、更简单的日志输出

六、在原有项目添加lombok


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

🌃日志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看日志,那么你能找到出错的原因吗? 答案是不可以的,写代码是很严肃的一件事情,不能靠猜来解决问题,因此日志对于我们来说,最主要的用途就是排除和定位问题。

二、如何看到日志文件?

🌇我们的springboot项目启动的时候在控制台就有日志输出:5da2767890d84542a9ae97c778ced6b4.png

🎇通过运行结果我们可以观察到:

🎑1、Spring Boot 内置了⽇志框架;
📸2、默认情况下,输出的⽇志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印⽇志呢?
📞3、日志默认是打印在控制台上的,而控制台的⽇志是不能被保存的,那么怎么把日志永久的保存下来 呢?

三、如何自定义日志打印

1、在程序中得到⽇志对象

在程序中获取日志对象需要使⽤⽇志工厂 LoggerFactory,语法如下:

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

注意这里Logger选择这个slf4j包下的,不要导错包;

0fe55db0e2b54821833b62d0db033386.png

即⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位问题类;

2、使用日志对象提供的内置方法来打印日志

在demo包下新建一个包controller,然后新建一个类UserController,代码如下:
package com.example.demo.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.ResponseBody;@RequestMapping("/user")
@Controller
@ResponseBody //用来设置当前类中所有的方法返回的是数据而非页面
public class UserController {//1、得到日志对象private static final Logger logger = LoggerFactory.getLogger(UserController.class);@RequestMapping("/hello")public String Hi(){// 写日志logger.trace("我是 trace");logger.debug("我是 debug");logger.info("我是 info");logger.warn("我是 warn");logger.error("我是 error");return "hello SpringBoot";}
}

2、在resources包下新建一个yml文件,写上端口号,自己取就可以;

8d8e2f248842497eb88559e3be3c20fc.png

 3、运行启动类DemoApplication;

a8d1ed4bb6e44c4b9b5252f07dca4a0e.png

4、在浏览器输入对应的url地址来访问;http://localhost:1234/user/hello ,按下回车:

a3087d08c7b446b290d1922b65026d9b.png

OK,这个时候再回到我们的idea控制台观察运行结果:

48a686b2beba460cbe1a4715dff9b034.png

那么问题来了,我们写的代码是要打印五个,我们发现结果只打印了三个,那么trace和debug去哪里了呢?那就要来到我们下一个目录的内容了,日志的级别;

四、日志级别

1、日志级别有什么作用?

1、日志级别可以帮你筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。

2、日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求;

2、日志的级别分类;

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

对应日志级别的顺序:

5a87fe2dd85d4bcbb9a9ece40937581c.png

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

3、日志级别的设置

1、日志级别我们需要在配置文件application.yml中设置即可,这里我们在生产环境下的配置文件中设置日志的级别为debug:

logging:level:root: debug

2、运行启动类,这时候控制台会打印很多日志;

7da0ae619c05434ea29ff86f8358609c.png

 3、在浏览器访问一下,点击这个刷新按钮即可;

a6d672a7e15e40bab68b4a0873c71911.png

 4、再次回到我们的idea,观察运行结果;

9ed19601d892418a97c729f63081d4b2.png

那么,不仅可以对全局的类进行设置,还可以针对指定的包下的类进行设置日志的级别:

7fec78542e0a4c9db212bca05adee8fc.png

4、日志持久化

那么以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追 溯问题,把⽇志保存下来的过程就叫做持久化。
想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。
1、配置日志文件的保存路径,在自己电脑选择一个目录用来存放打印的日志信息;
6b0482889f1d45d1ba21dc3ebeabd292.png
2、运行启动类,然后去浏览器访问一下;
b50d16d60c5d4e52a6198d44579b2595.png

3、查看刚设置的日志文件目录下是否生成了日志文件;

966d5c3784da40d68f6fa6d8693fc839.png

4、OK,我们打开来看一下,写入了哪些日志内容;

6cb89d3316014b50a8f8775e5f884c49.png

要注意,这里我们如果在sayHi方法里面给出System.out.println来打印一行内容,那么是不会写入到日志文件当中的,也就是说System.out.println打印的日志是不能够持久化的。

5、我们还可以配置日志文件的文件名;

name: D:\Spirng框架\Spirng_GO\Spring_Learn\springboot项目\logs\springboot-1.logs

运行结果:

2904403a375f444ea90e633341fe4553.png

五、更简单的日志输出

那么上面的演示,每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,有没有更好的方式来输出日志呢?
答案:使⽤ lombok 来更简单的输出。
1、添加lombok框架支持;
2、使用注解@Slf4j;

在线演示:首先我们在controller包下新建一个AriticleController类:

package com.example.demo.controller;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
@RequestMapping("/art")
@Slf4j
public class ArticleController {//    // 1.得到日志对象
//    private static final Logger logger = LoggerFactory.getLogger(ArticleController.class);@RequestMapping("/hi")public String sayHi() {log.trace("我是 slf4j 的 trace");log.debug("我是 slf4j 的 debug");log.info("我是 slf4j 的 info");log.error("我是 slf4j 的 error");return "Hi,Article Info.";}}

注意注解@Slf4j已经添加,添加之后,我们便直接可以使用log对象,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名;

跟之前一直,运行启动类,然后去浏览器访问我们的url地址;

bfec08d993244093a3c7d5459218c8b0.png

idea控制台打印的信息:

63633d6013da46b7bd7d889bbc016b37.png

对应的相应目录,观察记录下来的日志:

4dc255dd0e5e4a1a9aa1952be40f90e2.png

六、在原有项目添加lombok

那么有的小伙伴创建springboot项目的时候可能没有添加lombok依赖,但是现在想在当前项目添加lombok依赖,以便于实现更简单的日志打印,如何操作呢?

1、首先我们需要装一个插件EditStarters;

2a2057dc258f4a279fda380e852487e6.png

2、安装完成之后,在我们的配置文件application.yml中鼠标右键,找到Generate;

277f040ab6214de1b99fc360e8d866a4.png

3、点击EditStarters;

f6b6a1e9ca7f475b81a4c41a40fec88e.png

4、找到lombok选中,点击OK;

5774b354b6b84b99ac33130f94ef4260.png

🌁OK,那么springboot日志文件的相关内容就到这里啦,创作不易,还请三连一波,感谢支持,我们下期再见啦!!💡💡


http://www.ppmy.cn/news/69537.html

相关文章

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 …

在线PS软件有哪些不错的推荐

许多新的UI设计合作伙伴非常关心在线ps工具的选择。现在市场上有各种各样的ps网页替代工具,数量众多,令人眼花缭乱。本文简要介绍了10个在线PS工具,我相信一定有一个适合你! 1.即时设计 即时设计是一款在线 UI 设计工具&#xf…

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档:https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址:https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代: 传统部署时代:在物理服务器上运…

点亮未来明灯,引领绿色革命

随着全球气候变化日趋严重,能源转型成为解决气候问题和提高全球能源安全合理性的必要措施之一。可持续能源技术因其对环境的友好性和可再生性而成为了当前热点话题。可持续能源技术已经成为人们日益关注的焦点。这项技术可以帮助我们减少对化石燃料的依赖&#xff0…

【周末闲谈】超越ChatGPT?科大讯飞星火认知大模型

个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 ✨第一周 二进制VS三进制 ✨第二周 文心一言,模仿还是超越? ✨第二周 畅想AR 文章目录 前言星火名字的由来科大讯飞星火落地应用演示赶超ChatGPT的底气在哪里?“硬…

Go语言的简介和环境搭建

Go语言的简介和环境搭建 带你了解什么是Go语言 如何安装和配置Go的开发环境 静态强类型,编译型语言!!! 1.简介 1.1介绍 Go 也称为 Golang,两个是一个东西。谷歌弄得。创造者都是大佬,所以说这个编程语言很…

【讲座信息】(海洋科学-物理海洋学;大气科学;水文等)

国外研究机构 Woods Hole Oceanographic Institution (WHOI) Woods Hole Oceanographic Institution (WHOI) is the world’s premier independent organization dedicated exclusively to ocean research, technology, and education. We combine state-of-the-art science, …

MySQL之单表访问方法

前言 本文章收录在MySQL性能优化原理实战专栏,点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》 对于我们这些MySQL的使用者来说,MySQL其实就是一个软件,平时用的最多的就是查询功…