七、SpringBoot日志

1. 得到日志对象

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 UserController {
//1.通过日志门面得到日志对象
private static final Logger logger = LoggerFactory.getLogger(UserController.class);

SpringBoot内置了日志框架Slf4j ,我们可以直接在程序中调用Slf4j 来输出日志,在程序中获取日志对象需要使用日志工厂LoggerFactory, logger对象是属于org.slf4j包下的

2. 打印日志 

package com.example.springboot.Blog;
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 UserController {//1.得到日志对象//日志的命名一般以类名来命名UserController.classprivate static final Logger logger =LoggerFactory.getLogger(UserController.class);@RequestMapping("printBlog")public String Hi(){logger.trace("trace");logger.debug("debug");logger.info("info");logger.warn("warn");logger.error("error");return "SpringBoot Blog";}
}

执行程序后

发现只打印了三个。是因为SpringBoot有一个默认级别,当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出。

3. 日志信息

4. 日志框架(know about)

slf4j是一个日志门面,不是一个真正的日志框架,  SLF4J是门面模式的典型应用(但不仅仅使⽤了门面模式),默认调用java的logback日志的实现类。 log4j是一个日志框架。

4.1 门面模式(以前学过的单例模式,工厂模式)
思想:
(a)以开关灯为例,先定义一个顶层接口包含两个抽象方法off()和on()开关灯
(b)定义三个类实现开关灯接口,餐厅、走廊、卧室其中有具体的开关灯实现方法
(c)定义一个门面类,创建餐厅、走廊、卧室的对象,通过调用这些不同对象的实现方法来完成灯的统一关闭和打开

门面模式(FacadePattern)又称为外观模式,提供了⼀个统⼀的接口,用来访问子系统中的⼀群接口. 其主要特征是定义了⼀个高层接口,让子系统更容易使用.

门面模式的优点
减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它 的客⼾端;
提高了灵活性,简化了客户端对⼦系统的使用难度,客⼾端⽆需关心子系统的具体实现⽅式,⽽只需 要和门面对象交互即可.
提高了安全性.可以灵活设定访问权限,不在门面对象中开通方法,就⽆法访问
日志门面直接为程开发者提供服务,开发者不能直接进行日志实现,这样可以解耦合。日志门面相当于中间平台,日志实现的方法可能会不相同,开发者只要通过日志门面就可以统一的使用日志功能

5. 日志级别

⽇志的级别分为:
trace:微量,少许的意思,级别最低; 
debug:需要调试时候的关键信息打印; 
info:普通的打印信息(默认⽇志级别); 
warn:警告,不影响使⽤,但需要注意的问题;
error:错误信息,级别较高的错误日志信息,  但仍然不影响系统的继续运行
fatal:致命的,  表示需要立即被处理的系统级错误, 因为代码异常导致程序退出执行的事件。
作用:
    快速筛选重要日志: 日志级别可以帮助我们只查看关注的点,日志级别为error, 就可以只看程序的报错日志
System. out.print1n 对比  日志框架的缺点
1.sout打印信息不全(没有打印日志的时间、没有打印日志的来源)
2.不能实现日志打印的隐藏和显示

6.日志级别设置

6.1 设置整个项目的日志级别
logging:
#设置日志级别为debug,可以打印debug及以上的日志级别level:root: debug

root表示根目录,表示整个项目的日志级别

6.2 指定类设置日志级别
设置根目录下com.example.springboot.blog的UserController类的日志级别为error
logging:
#针对不同的目录打印不同的日志级别
com:example:springboot:Blog:UserController:error

7. 日志持久化

以上打印的日志都是在控制台,程序有一旦关闭,日志就会结束打印。因此需要将日志持久化,将日志保存下来(存入磁盘)。

7.1 设置日志的保存目录
可以看见生成了一个日志文件,里面只保存跟日志相关的内容。日志信息是追加的,前面的不会删除。

7.2 设置日志⽂件的⽂件名
# 设置⽇志⽂件的⽂件名
logging:file:name: G:\\IDEA java\\java-ee\\logs\\spring.log

logging.file.name 和logging.file.path 两个都配置的情况下,只生效其⼀,以logging.file.name 为准。

直接只填写日志文件名字的话,日志文件保存在pom.xml文件的同一个目录中

8. 日志文件的分割

#日志文件分割logback:rollingpolicy:#日志分割格式:⽇志分割后的⽂件名格式:⽇志名.⽇期.索引file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i#日志分割条件:达到10kb后就存放到下一个文件中去max-file-size: 10KB

9. 使用@Slf4j注解:更加简单的日志打印

lombok的@Slf4j
直接加上 @ Slf4j注解,会自动帮我们生成日志对象,直接使用即可
@Slf4j注解在源代码编译成字节码文件后, @Slf4j注解消失,但是在类的内部生成
private static final Logger logger LoggerFactory. getLogger (UserController. class ) @Slf4j注解作用相同

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

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

相关文章

C++程序使用开源zlib库对二进制字节流数据进行压缩和解压(附源码)

目录 1、概述 2、zlib开源库与开源zip.cpp和unzip.cpp的区别 3、发送端先调用compress压缩,再将数据发出去 4、接收端接收到数据,调用uncompress解压,解压后再使用 5、最后 C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.c…

c++-封装案例-设计学生类

类中的属性和行为统称为成员,属性:成员属性、成员变量;行为:成员函数,成员方法。

黛米·摩尔和她的孙女卢埃塔在这张飘逸的快照很亲密

卢埃塔和她的祖母黛米摩尔显然是最好的朋友,这张飘逸的快照证明了这一点。准备好“哇!” 7 月 26 日,摩尔分享了一张非常迷人的照片,照片上有她、她的两个女儿和她的孙女在她昂贵的后院。她在照片中配文说:“夏日&…

vue3-环境变量-JavaScript-axio-基础使用-lzstring-字符串压缩-python

文章目录 1.Vue3环境变量1.1.简介1.2.全局变量的引用1.3.package.json文件 2.axio2.1.promise2.2.安装2.3.配置2.3.1.全局 axios 默认值2.3.2.响应信息格式 2.4.Axios的拦截器2.4.1.请求拦截器2.4.2.响应拦截器2.4.3.移除拦截器2.4.4.自定义实例添加拦截器 3.lz-string3.1.java…

回溯

组合问题 LeetCode77 组合 class Solution { public:vector<vector<int>>res;vector<int>list;void dfs(int begin,int n,int k){if(list.size()k){res.push_back(list);return;}for(int ibegin;i<n;i){list.push_back(i);dfs(i1,n,k);list.pop_back();}…

(源码分析)springsecurity认证授权

了解 1. 结构总览 SpringSecurity所解决的问题就是安全访问控制&#xff0c;而安全访问控制功能其实就是对所有进入系统的请求进行拦截&#xff0c;校验每个请求是否能够访问它所期望的资源。 根据前边知识的学习&#xff0c;可以通过Filter或AoP等技术来实现&#xff0c;Spr…

天津仁爱学院2024级专升本新同学开学报到提示

亲爱的2024级新同学: 亲爱的仁爱新人&#xff0c;你准备好了吗&#xff1f;祝福之余&#xff0c;关于入学报到还有以下几点提示&#xff1a; 01报到时间 报到时间:2024年9月1日。报到时请携带录取通知书和准考证。因参军保留入学资格或因病及其他原因不能按时报到的同学&#x…

主图趋势交易九稳量化系统 期货指标公式大全 最准的期货指标源码 看期货涨跌最简单的方法文华财经指标公式源码

交易的动机必须来自于内心&#xff0c;一种解决问题的执着。在整个交易生涯的漫长岁月里&#xff0c;无法始终保持这种热忱。除非亲身体验&#xff0c;否则很难理解这种疯狂的热忱。这是一种高度的专注&#xff0c;其他一切好像都不存在&#xff0c;视野之内没有其他的东西。这…

利用Python进行高效数据分析实践

引言 在当今的数据驱动世界中&#xff0c;能够有效地处理和分析数据已成为许多行业的核心竞争力。Python作为一种强大的编程语言&#xff0c;因其简洁易读的语法以及丰富的第三方库支持&#xff0c;在数据科学领域受到了广泛的欢迎。本文将介绍如何使用Python进行高效的数据分…

探索 Milvus 存储系统:如何评估和优化 Milvus 存储性能

欢迎来到探索 Milvus 系列。Milvus 是一款支持水平扩展和具备出色性能的开源向量数据库。Milvus 的核心是其强大的存储系统&#xff0c;是数据持久化和存储的关键基础。该系统包括几个关键组成部分&#xff1a;元数据存储&#xff08;meta storage&#xff09;、消息存储&#…

苹果电脑怎么使用Windows软件 苹果笔记本怎么安装Windows mac怎么安装windows

最早的苹果电脑的概念是在1976年的时候由乔布斯提出来的&#xff0c;在1977年的时候发行的第一款个人电脑&#xff0c;也就是苹果笔记本电脑。苹果笔记本的操作系统是MAC OSmac OS是基于unix内核的系统&#xff0c;这个系统是专门为苹果电脑开发的。macOS比windows的视觉冲击大…

Synchronized的锁升级过程是怎样的?

文章目录 一、Synchronized的使用1、修饰实例方法2、修饰静态方法3、修饰代码块4、总结&#xff1a; 二、Monitor1、Java对象头1.1 32 位虚拟机的对象头1.2 64位虚拟机的对象头 2、Mark Word 结构3、Moniter4、Synchronized 字节码5、轻量级锁6、锁膨胀7、自旋优化8、偏向锁9、…

C++ 代码实现局域网即时通信功能 (windows 系统 客户端)

本项目使用C实现具备多个客户端和服务器端即时通信聊天功能软件 一&#xff1a;项目内容 使用C实现一个具备多客户端和一个服务器端即时通信功能的聊天软件。 本项目的目的是 学习在windows平台下&#xff0c;进行C网络开发的基本概念&#xff1a;TCP/IP socket通信&#xff0…

Java集合之HashMap的数据结构分析

总所周知&#xff0c;Java中键值对集合&#xff0c;我们最常用的就是HashMap&#xff0c;那么它的数据结构&#xff0c;以及如何存储键值对&#xff0c;包括为什么使用红黑树&#xff0c;链表等许多数据结构&#xff0c;下面我们一起学习交流 1.HashMap的数据结构&#xff1a;…

scratch二次开发:如何修改toolbox宽度

大家好&#xff0c;我是小黄。 使用场景&#xff1a;有时候我们开发图形化编程时&#xff0c;我们的积木块很长&#xff0c;导致一部分无法显示&#xff0c;我们想要把目录区域位置放大&#xff0c;比如下面红色方框区域位置&#xff0c;那么改如何实现这个过程呢&#xff1f;…

Qt,获取其他.exe文件的标准输出流的信息(printf/print的输出信息)

比如&#xff0c;通过Python编写爬虫软件功能是运行程序获取豆瓣电影排行榜信息&#xff0c;并通过print打印出来。将其打包成.exe,通过Qt来调用&#xff0c;并获取到.exe程序运行的结果 简单示例代码&#xff1a; // 创建 QProcess 对象QProcess process;// 连接信号槽以获取…

嵌入式学习Day14---C语言进阶

目录 一、构造类型 1.1.结构体 1.存储 2.输入输出&#xff08;传参&#xff09; 3.结构体数组 1.2.共同体&#xff08;联合体&#xff09; 1.格式 2.存储 3.测试一个平台是打端还是小端 1.3.枚举 1.格式 2.特点 二、位运算&#xff08;操作二进制&#xff09; 2.1.&a…

培训第十六天(web服务apache与nginx)

上午 静态资源 根据开发者保存在项目资源目录中的路径访问静态资源html 图片 js css 音乐 视频 f12&#xff0c;开发者工具&#xff0c;网络 1、web基本概念 web服务器&#xff08;web server&#xff09;&#xff1a;也称HTTP服务器&#xff08;HTTP server&#xff09;&am…

翻译: 可视化深度学习神经网络一

这是一个随意书写的28*28像素、分辨率很低的数字 3 但你的大脑一看见就能轻松辨识出来 &#xff0c;我想要你好好欣赏这点 人脑能够毫无障碍地辨识是非常厉害的 我的意思是&#xff0c;这个、这个、还有这个&#xff0c;都能被识别为 3 即使前后图像的图形组成有很大差异 当你…

懂个锤子Vue 项目工程化扩展:

Vue项目工程化扩展&#x1f4f6;&#xff1a; 前言&#xff1a;当然既然学习框架的了&#xff0c;HTMLCSSJS三件套必须的就不说了&#xff1a; JavaScript 快速入门 紧跟前文&#xff0c;目标学习Vue2.0——3.0&#xff1a; 懂个锤子Vue、WebPack5.0、WebPack高级进阶 涉及的…