七、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.rhkb.cn/news/383445.html

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

相关文章

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多,所以一定是html包python最优!于是引出今天的模板。 大体分为三个步骤:…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说,外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎:“这个网站的内容是有价值的,值得推荐。”因此,外链的数量和质量直接影响你的网站在搜索引擎中的排…

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母,需要的个数 (2)再创一个字典的方法统计,输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

vue3编程-import.meta.glob实现动态路由(菜单)

import.meta.glob 是vite提供的批量懒加载组件的方法 本地开发环境: const modules import.meta.glob(../views/**/*.vue)这段代码返回的modules是一个Map: key是vue文件的相对路径,值是一个函数,将函数打印出来,如…

Python鲁汶意外莱顿复杂图拓扑分解算法

🎯要点 🎯算法池化和最佳分区搜索:🖊网格搜索 | 🖊发现算法池 | 🖊返回指定图的最佳划分 | 🖊返回指定图的最佳分区 | 🎯适应度和聚类比较功能:🖊图的划分 |…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址,其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme:协议,常用的协议有 Http,https,ftp等等;usern…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中,随着面积的不断扩张和布局的日益复杂,传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室,不同的业务。这种低效的寻路过程不仅影响了客户的来访体验,也…

Flink时间和窗口

目录 时间语义 水位线(Watermarks) 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示,由事件生成器(Event Pr…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid,使用中发现唯一建冲突,生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…

饥荒dst联机服务器搭建基于Ubuntu

目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G,4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放: tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…

前端:Vue学习 - 购物车项目

前端:Vue学习 - 购物车项目 1. json-server,生成后端接口2. 购物车项目 - 实现效果3. 参考代码 - Vuex 1. json-server,生成后端接口 全局安装json-server,json-server官网为:json-server npm install json-server -…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

加密软件有什么用?五款电脑文件加密软件推荐

加密软件对于个人和企业来说至关重要,尤其是在2024年这样一个高度数字化的时代,数据安全变得尤为重要。 数据保护:加密软件可以保护敏感信息不被未经授权的人访问。这包括个人数据、财务记录、健康信息、企业机密等。 防泄漏:防…

Python 全栈体系【三阶】(三)

第一章 Django 七、静态文件 1. 概述 静态文件是指在WEB应用中的图像文件、CSS文件、Javascript文件。 2. 静态文件的配置 settings.py中关于静态文件的配置如下: STATICFILES_DIRS [BASE_DIR , static, ]STATIC_URL /static/其中: STATICFILES…

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题,有synchronized锁,threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作,手动释放锁,显式地获取锁(属…

【llama3.1】ollama的使用--本地部署使用llama3.1模型

快速入门 安装完成ollama后,在命令行窗口输入 ollama run llama3 上图表示 Ollama 正在下载 llama3 任务所需的资源文件,并显示了当前的下载进度、速度和预计剩余时间。这是 Ollama 在准备运行 llama3 任务之前所需的步骤。 上面的步骤完成后,就可以在本地进行聊天了,…

Golang | Leetcode Golang题解之第268题丢失的数字

题目: 题解: func missingNumber(nums []int) int {n : len(nums)total : n * (n 1) / 2arrSum : 0for _, num : range nums {arrSum num}return total - arrSum }

Xlua原理 二

一已经介绍了初步的lua与C#通信的原理,和xlua的LuaEnv的初始化内容。 这边介绍下Wrap文件。 一.Wrap介绍 导入xlua后可以看到会多出上图菜单。 点击后生成一堆wrap文件,这些文件是lua调用C#时进行映射查找用的中间代码。这样就不需要去反射调用节约性…