浅谈SpringBoot日志文件

news2024/11/22 19:59:33

文章目录

  • 一、日志的作用
  • 二、如何在SpringBoot中使用日志
    • 2.1、在程序中得到日志对象。
    • 2.2、通过日志对象中提供的内置方法操打印日志信息
      • 2.2.1 日志级别
        • 2.2.1.1、日志级别有什么作用??
        • 2.2.1.2、日志级别的分类
        • 2.2.1.2、在配置文件中设置日志级别[!]
  • 三、日志框架
  • 四、日志的持久化[!]
    • 4.1、配置文件中设置日志的保存路径
    • 4.2、配置文件中设置日志的文件名
  • 五、System.out.println vs 日志框架存在的缺点
  • 六、更简单的日志输出——lombok

一、日志的作用

1、排除和定位问题
2、记录用户登录日志, 方便分析用户是正常登录还是恶意破解用户。
3、记录系统的操作日志,方便数据恢复和定位操作人。
4、记录程序的执行时间,方便为以后优化程序提供数据支持。

二、如何在SpringBoot中使用日志

SpringBoot启动时,就有日志在控制台输出:
在这里插入图片描述
Spring启动输出日志信息,说明:
1、SpringBoot内置了日志框架。
2、默认情况下,输出的日志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢??
3、日志信息默认打印在控制台上,但控制台的日志信息不能被保存,那怎么永久将日志信息保存下来??

那么程序员在SpringBoot中自定义打印日志需要:

2.1、在程序中得到日志对象。

LoggerFactory 来自 slf4j包,slf4j 就是SpringBoot中内置的日志框架。

private static Logger 1ogger = LoggerFactory. getLogger(UserController .class);

2.2、通过日志对象中提供的内置方法操打印日志信息

代码例子:

package com.example.testall.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;

/**
 * 程序员自己自定义打印日志
 */
@Controller
@ResponseBody
@RequestMapping("/testlogger")  //一级路由
public class testLogger {
//    getLogger()的参数既可以是String又可以是类,参数表示的意思是:
//    当前的日志信息是来自哪个类。

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

    @RequestMapping("/hi")  //二级路由
    public String hi(){
        //    2、通过日志对象中提供的内置方法操打印日志信息
        logger.trace("我是 trace!");
        logger.debug("我是调试日志!");
        logger.info("我是 info");
        logger.warn("我是 warn");
        logger.error("我是 error");
        return "Hi,SpringBoot!";
    }

}

控制台运行结果:
在这里插入图片描述
在这里插入图片描述

但是为什么代码中写了5个日志打印,控制台却只输出打印3个日志信息??

2.2.1 日志级别

这与日志的级别有关! 日志进行打印时,只会打印当前设置的日志级别(SpringBoot默认的日志级别就是 info。)以及比当前日志级别更高的日志,低的日志就不打印了。[!]

就像工作中,你的领导可以给你安排工作,领导的领导同样也可以给你安排工作,因为对于你的领导来说,你的级别低,但是对于别的员工来说,你级别较高也是一个领导,此时级别比你低的员工就不能给你安排工作。

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

1、通过日志级别能快速筛选出重要的信息,节省时间。 一般看控制台输出的日志信息时,不会全部日志级别都看,着重关注 warn(警告)、error(错误)这两个日志级别,也有可能只关注 error 日志。
2、不同环境实现不同日志级别设置的需求。可能开发环境下,需要着重关注详细信息,此时就需要很多日志打印的支持;而生产环境下为了保证性能与安全性,会尽量少的出现日志输出。

2.2.1.2、日志级别的分类

trace:微量、少许
debug:需调试时的关键信息打印
info:普通的打印信息(默认的日志级别)
warn:警告信息,不影响使用,但需要注意的问题
error:错误信息。级别较高
fatal:致命的,因为代码异常导致程序退出执行的事件(这个日志级别是没办法通过日志对象内置的方法来自定义输出的,因为这个日志级别对于程序来说是致命的,只有程序由于异常而退出时,才会由系统输出)

级别从小到大:
trace < debug < info < warn < error。
在这里插入图片描述

2.2.1.2、在配置文件中设置日志级别[!]

在这里插入图片描述
此时就将SpringBoot框架里的默认日志级别从 info 改成了 debug。还是之前的代码,此时程序运行结果多了打印 debug 日志!
在这里插入图片描述

当我们的项目中含有许多不同层级时,希望这些层级输出的日志级别都不一样,此时也可以通过配置文件按配置。
在这里插入图片描述
此时就可以在配置文件中给3个层级设置不同日志级别来让控制台输出不同的日志信息。
在这里插入图片描述

三、日志框架

SpringBoot引入了哪些日志框架??为什么能把日志打印出来??
在这里插入图片描述

四、日志的持久化[!]

我们现在所见到的日志信息都是打印在控制台的,但是控制台输出的信息并不会持久的保存,因此我们需要对日志进行持久化,确保日志能够永久、持久的保存、并且方便查看。

持久化的方式无非两种:1、存进数据库 2、保存进磁盘。

日志的持久化是保存在磁盘上,那么有两种方式保存在磁盘上:

4.1、配置文件中设置日志的保存路径

此时SpringBoot就会将你项目中所有输出到控制台的日志信息保存到你所设置的保存路径里。
在这里插入图片描述
我是先在D盘下建立名为mylogs的目录,然后在项目的配置文件中设置日志的配置项,此时项目启动之后,Spring就会在目录mylogs下生成spring.log文件,将项目输出的日志信息保存到该文件中。
在这里插入图片描述
日志信息持久化保存在文件里时,其内容是追加的,不会覆盖!
当设定的保存日志信息的文件保存了很多日志信息以至于文件量变大,导致每次打开日志文件就很困难时,SpringBoot是会设定一个文件保存最大值,当我们设定的文件里的日志信息达到该值后,SpringBoot就会新建一个文件保存日志信息。

4.2、配置文件中设置日志的文件名

在这里插入图片描述

五、System.out.println vs 日志框架存在的缺点

1、System.out.println 打印信息不全,缺少输出时间、打印来源…
2、不能实现像日志框架那样的隐藏和显示
3、System.out.println 打印的日志信息不能持久化

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

使用 lombok 提供的 注解 @slf4j,
注解 @slf4j 等于代码:private static Logger 1ogger = LoggerFactory. getLogger(UserController .class); , 方法里的类参数也不需要我们传入了,注解全部帮我们做好了。

此时就提供了一个log对象,通过此log对象使用日志框架里内置的方法输出日志信息。
在这里插入图片描述

使用lombok后,lombok为我们节省了一些代码的书写,只需要添加一个注解就好了,那么它的原理是什么?
在这里插入图片描述

lombok的常用注解:
在这里插入图片描述

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

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

相关文章

数字人动作解决方案,塑造逼真动作

在品牌形象塑造、市场推广及客户服务等领域&#xff0c;企业正面临着前所未有的挑战和机遇。为满足企业的需求&#xff0c;美摄科技凭借其在人工智能和计算机视觉领域的深厚积累&#xff0c;推出了面向企业的数字人动作解决方案&#xff0c;助力企业轻松打造逼真、灵活的虚拟形…

LLM的基础模型6:注意力机制

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

【问题复盘】第三方接口变慢导致服务崩溃

一、事件经过 -1、一个不在公司的下午&#xff0c;接到客户投诉&#xff0c;说平台不能访问了。 0、介入调查&#xff0c;发现服务器http请求无法访问&#xff0c;https请求却可以正常访问&#xff0c;一时有些无法理解&#xff1b;&#xff08;后来发现&#xff0c;http和htt…

Java核心: 为图片生成水印

今天干了一件特别不务正业的事&#xff0c;做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人&#xff0c;手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能&#xff0c;但会把我的图片上传到他们的服务器&#xff0c;身份证太…

离散数学期末复习题库(含答案)

目录 1.判断题 1-1 1-2 1-3 1-4 2.选择题 2-1 2-2 2-3 3.多选题 3-1 4.填空题 4-1 4-2 4-3 4-4 4-5 5.主观题 5-1 5-2 5-3 5-4 1.判断题 1-1 ϕ⊆{ϕ} &#xff08;对&#xff09; 1-2 {a,b}∈{a,b,c,{a,b}} &#xff08;对&#xff09; 1-3 {a,b…

【Selenium+java环境配置】(超详细教程常见问题解决)

Seleniumjava环境配置 windows电脑环境搭建-chrome浏览器1. 下载chrome浏览器2. 查看chrome浏览器版本3. 下载chrome浏览器驱动4.配置系统环境变量PATH 验证环境是否搭建成功1. 创建java项目&#xff0c;添加pom文件中添加依赖2. 编写代码运行 常见问题&解决办法1.访问失败…

opencv进阶 ——(十二)基于三角剖分实现人脸对齐

三角剖分概念 三角剖分&#xff08;Triangulation&#xff09;是一种将多边形或曲面分解为一系列互不相交的三角形的技术&#xff0c;它是计算几何、计算机图形学、地理信息系统、工程和科学计算中的一个基本概念。通过三角剖分&#xff0c;复杂的形状可以被简化为基本的三角…

【蓝桥杯2025备赛】分巧克力

【蓝桥杯2025备赛】分巧克力 [蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 K K K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N N N 块巧克力&#xff0c;其中第 i i i 块是 H i W i H_i \times W_i Hi​Wi​ 的方格组成的长方形…

达梦 执行查询语句时报[-544]:Out of sort buf space

达梦数据库有时执行SQL中有时报[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE. 第一反应是这条语句占用排序区太大。但真实原因是前面执行的语句耗光了全局排序区&#xff0c;后面SQL任何小的排序操作都会报这个错误从而执…

YOLO系列模型 pt文件转化为ONNX导出

文章目录 啥是onnx怎么导出导出之后 啥是onnx Microsoft 和合作伙伴社区创建了 ONNX 作为表示机器学习模型的开放标准。许多框架&#xff08;包括 TensorFlow、PyTorch、scikit-learn、Keras、Chainer、MXNet 和 MATLAB&#xff09;的模型都可以导出或转换为标准 ONNX 格式。 在…

RxSwift - 实现一个MVVM架构的TableView

文章目录 RxSwift - 实现一个MVVM架构的TableView前沿MVVM架构的Tableview目录结构1、模型&#xff08;Model&#xff09;2、视图模型&#xff08;ViewModel&#xff09;3、视图&#xff08;View&#xff09; 界面效果 RxSwift - 实现一个MVVM架构的TableView 前沿 MVVM架构在…

敏捷开发:拥抱变化,持续交付价值的艺术

目录 敏捷开发&#xff1a;拥抱变化&#xff0c;持续交付价值的艺术 引言 第一部分&#xff1a;敏捷开发是什么&#xff1f; a.定义&#xff1a;敏捷开发的基本概念和核心原则 b.历史&#xff1a;敏捷宣言的诞生和敏捷开发的历史背景 c.价值观&#xff1a;敏捷宣言的12条…

python的优势有哪些?

python的优点很多&#xff0c;下面简单地列举一些&#xff1a; 简单 Python的语法非常优雅&#xff0c;甚至没有像其他语言的大括号&#xff0c;分号等特殊符号&#xff0c;代表了一种极简主义的设计思想。阅读Python程序像是在读英语。 易学 Python入手非常快&#xff0c;学习…

for深入学习

目录 练习&#xff1a; 例1&#xff1a; 求解0-100中整除3的数有哪些 例2&#xff1a; 求0-100中含数字9个个数 作业&#xff1a; 练习&#xff1a; 例1&#xff1a; 求解0-100中整除3的数有哪些 代码&#xff1a; #include<stdio.h> int main() {printf("整…

Ubuntu系统中Apache Web服务器的配置与实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

封装了一个仿照抖音评论轮播效果的iOS轮播视图

效果图 原理 就是我们在一个视图里面有两个子视图&#xff0c;一个是currentView, 一个是willShowView,在一次动画过程中&#xff0c;我们改变current View的frame&#xff0c;同时改变willShowView的frame&#xff0c;同时&#xff0c;需要改变currentVIew 的transform.y不然…

【数据结构】链式二叉树详解

个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…

(echarts)图上数值显示单位

&#xff08;echarts&#xff09;图上数值显示单位 series: [{name: 比例,type: bar,...label: {show: true,position: top,formatter: (params) > params.value % //图上数值显示格式},tooltip: { //鼠标移入图上数值显示格式valueFormatter: function(value) {return val…

电源设计01

嵌入式电源设计 电池容量的计算电路充电时的选择&#xff1a; 科普硬件知识&#xff0c;写写关于电路板电源的事情。各类电源模块实物但为什么硬件工程师又必须要了解电源并且在板内自己设计电源呢&#xff1f;首先是DCDC的降压芯片下面推荐几个升压芯片&#xff1a;LDO 电池容…