SpringBoot 日志文件从入门到实战

news2024/11/29 22:34:21

文章目录

    • 1. 日志的作用
    • 2. 日志怎么用
    • 3. 自定义日志打印
      • 3.1 程序中得到日志对象
      • 3.2 使用日志对象打印日志
      • 3.3 日志格式说明
    • 4. 日志级别
      • 4.1 日志级别的作用
      • 4.2 日志级别的分类与使用
      • 4.3 日志级别的设置
      • 4.4 综合练习
    • 5. 日志的持久化
      • 5.1 配置日志文件的保存路径:
      • 5.2 配置日志文件的文件名:
      • 5.3 综合练习:
      • 5.4 不同批次的日志是覆盖还是追加?
    • 6. 更简单的日志输出

1. 日志的作用

日志是程序的重要组成部分 , 虽然不是必须的 , 但如果不打开控制台查看日志 , 将很难排查错误.

除了发现和定位问题之外 , 我们还可以通过日志实现以下功能:

  • 记录用户登录日志 , 方便分析用户是正常登录还是恶意破解用户.
  • 记录系统的操作日志 , 方便恢复数据和定位操作人.
  • 记录程序的执行时间 , 方便以后优化程序提供数据支持.

日志真实使用案例:

  • 应用程序日志记录:开发人员在应用程序中添加日志记录功能,以便在应用程序运行时跟踪和调试问题。例如,当应用程序出现错误时,开发人员可以查看日志文件以了解错误的原因。
  • 安全日志记录:安全管理员可以使用安全日志记录来跟踪系统中的安全事件。例如,当系统出现入侵尝试时,安全管理员可以查看日志文件以了解入侵者的行为和尝试的目的。
  • 网络日志记录:网络管理员可以使用网络日志记录来跟踪网络活动。例如,当网络出现故障时,网络管理员可以查看日志文件以了解故障的原因。
  • 应用程序性能分析:开发人员可以使用日志记录来分析应用程序的性能。例如,他们可以记录应用程序中的每个操作的执行时间,并使用这些信息来查找性能瓶颈。
  • 运维日志记录:运维人员可以使用日志记录来跟踪系统的运行状况。例如,当系统出现故障时,运维人员可以查看日志文件以了解故障的原因,并采取适当的措施来解决问题。

2. 日志怎么用

Spring Boot 框架中内置了日志框架 , 因此我们每次在项目启动的时候就能看到日志输出.

image-20230423202925378

通过上述日志信息可以得出三个问题:

  • Spring Boot 内置的日志框架是什么?
  • 开发中如何在项目中自定义打印日志?
  • 日志输出默认是在控制台的 , 如何将日志永久的保存起来?

3. 自定义日志打印

开发者自定义打印日志的实现步骤:

  1. 在程序中得到日志对象.
  2. 使用日志对象的相关语法输出要打印的内容.

3.1 程序中得到日志对象

每个类都有自己专属的日志 , 期望这个日志是唯一的不被他人修改 final

private static final Logger log = LoggerFactory.getLogger();

Tips: 一定要选择 slf4j 中的 Logger.

Spring 内置日志框架为 SLF4Jlogback , 可以在 Maven 的内置扩展中查看.

image-20230423201909014

其中:

  • SLF4J 是一个 Java 日志 API,它提供了一个抽象层,使得应用程序可以在不改变代码的情况下使用不同的日志实现。(类似于房屋中介)

  • Logback 是一个开源的 Java 日志框架 , 可以满足各种应用程序的日志需求。

SLF4J 的实现原理就是 门面模式 , 门面模式与代理模式非常相似 , 用户发送的日志请求 , 首先会来到SLF4J , 之后SLF4J 会自动匹配适合的日志框架 , 这样的设计方式会大大增强代码的灵活性和可移植性 , 程序员可以通过 SLF4J 的抽象层 , 轻松切换日志框架.

3.2 使用日志对象打印日志

 @RequestMapping("/sayHi") // = @WebServlet("/url")
    public String sayHi(){
//        System.out.println("打印日志");
        log.trace("i'm trace");//所有的痕迹都打印
        log.debug("i'm debug");
        log.info("i'm info");
        log.warn("i'm warn");
        log.error("i'm error");
        return "Hello world!" + "->" + myconfigration;
    }

执行结果如下:

我们发现没有看到 trace 和 debug 日志. 这是因为 info 为日志的默认级别 , 因此只输出 >= info 的日志.

image-20230423205154313

3.3 日志格式说明

image-20230423205631370


4. 日志级别

4.1 日志级别的作用

  • 日志级别可以帮你筛选出重要的信息 , 比如设置日志的级别为 ERROR, 开发中只查看程序的报错信息 , 可以节省开发者筛选信息的时间.
  • 调试和故障排查:在开发和测试阶段,可以将日志级别设置为DEBUG或TRACE,记录应用程序的详细运行信息,以便在出现问题时进行调试和故障排查。
  • 监控和性能分析:在生产环境中,可以将日志级别设置为INFO或WARN,记录应用程序的重要事件和异常情况,以便进行监控和性能分析。
  • 安全审计和合规性检查:在安全审计和合规性检查中,可以将日志级别设置为ERROR或FATAL,记录应用程序的安全事件和故障情况,以便进行安全审计和合规性检查。
  • 日志管理和存储:根据不同的日志级别进行日志管理和存储,将不同级别的日志存储到不同的日志文件中,以便进行日志管理和分析。

综上所述,日志级别的作用主要是在应用程序中记录日志时,根据不同的重要程度将日志分为不同级别,以便在不同场景下对日志进行筛选和过滤,从而实现调试和故障排查、监控和性能分析、安全审计和合规性检查等功能。

4.2 日志级别的分类与使用

日志的级别分为:

  • TRACE:最详细的日志级别,用于记录应用程序的详细运行信息,包括方法调用、变量值等。
  • DEBUG:用于调试应用程序,记录应用程序的调试信息,包括变量值、方法调用等。
  • INFO:记录应用程序的重要事件和状态信息,例如应用程序启动、关闭、配置信息等。
  • WARN:记录应用程序的警告信息,例如应用程序出现异常但不影响正常运行的情况。
  • ERROR:记录应用程序的错误信息,例如应用程序出现异常并影响了正常运行的情况。
  • FATAL:记录应用程序的严重错误信息,例如应用程序崩溃或无法继续运行的情况。

不同的日志级别对应不同的日志内容,包含的信息也不同。通常,可以根据应用程序的需要选择合适的日志级别进行记录,以便在不同场景下对日志进行筛选和过滤,从而实现调试和故障排查、监控和性能分析、安全审计和合规性检查等功能。

级别越高能收到的消息就越少 , 如果把日志级别设为 warn , 那么就只能收掉 warn , error 和 fatal 的信息.

4.3 日志级别的设置

日志级别的设置只需在配置文件中设置"logging.level"配置项即可.

配置根路径级别的日志:

#  日志级别设置
# 所有项目设置为 error
logging:
	level:
		root: error
@RestController // = @Controller + @ResponseBody
public class testController {
    //1.得到日志对象
    private static final Logger log = LoggerFactory.getLogger(testController.class);
    //注册一个路由
    @RequestMapping("/sayHi") // = @WebServlet("/url")
    public String sayHi(){
        //System.out.println("打印日志");
        log.trace("i'm trace");
        log.debug("i'm debug");
        log.info("i'm info");
        log.warn("i'm warn");
        log.error("i'm error");
        return "Hello world!" + "->" ;
    }
}

结果显示:

明显只打印 error 及 error 以上的日志信息.

image-20230424115543447

Tips: 如果不设置日志输出级别 , 默认为 info

4.4 综合练习

将所有项目的日志级别设置为 error , 而 controller 类中设置为 trace

logging:
	level:
		root: error
		com:
			example:
				demo:
					controller: trace

5. 日志的持久化

以上日志都是输出在控制台上 , 然而生产环境中需要我们把日志保存起来 , 以便后续回溯定位问题 , 将日志保存起来的过程就叫做持久化.

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

Tips: 路径一定要写绝对路径

logging:
	file:
		path: D:\\java\\

5.2 配置日志文件的文件名:

系统会自动在指定路径下创建一个 spring_log 文件 , 里面存储 日志文件.

logging:
	file:
		path: D:\\java\\spring_log

image-20230424122038585

5.3 综合练习:

将 controller 包下 error 级别以上的⽇志保存到 log_all.log 下,将 service包 下 warn 级别以上的⽇志保存到 log_all.log 下

logging:
  level:
    com:
      example:
        demo:
          controller: error
          service: warn
  file:
    path: D:\\java\\log_all.log

5.4 不同批次的日志是覆盖还是追加?

观察得出结论 , 日志文件一旦产生 , 那么日志文件及其内容就会永久的保存 , 不会出现文件或内容的丢失 , 所以不同批次的日志是追加.


6. 更简单的日志输出

每次写日志时 , 都要写下面代码 , 当业务过于复杂就会很麻烦:

private static final Logger log = LoggerFactory.getLogger(testController.class);

因此我们可使用 lombok 框架

lombok 是一个编译期的框架 , 在编译期 , lombok 的注解处理器会自动扫描 Java 源代码 , 并根据注解生成 Java 代码 , 最终与源代码合并 , 生成 Java 类文件. 生成的 Java 类文件可以像原 Java 文件一样被 编译 , 打包 , 部署.

在这里插入图片描述

@RestController
@Slf4j //给当前的类添加一个叫 log 的日志对象
public class LogController {
    @RequestMapping("/log")
    public String log(){
        log.info("我是 info");
        log.warn("我是 warn");
        log.error("我是 error");
        return "log sayhi";
    }
}



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

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

相关文章

MVP发布后,下一步该怎么办

MVP发布后,下一步该怎么办 一、为什么要从发布MVP开始?二、发布MVP后该做什么?1、推广MVP2、收集用户反馈3、进行用户发展访谈4、确定功能的优先次序5、建立一个产品路线图 三、如何衡量一个MVP的成功?1、分析仪表板的重要性2、创…

图解LeetCode——160. 相交链表

一、题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。注意,函数返回…

怎么把jfif改成png格式?这四种方法值得一试

怎么把JFIFf改成PNG格式?众所周知,JFIF是一种JPEG图像格式的子集,可以提供高质量的压缩效果。但是,JFIF格式有一些限制,例如它不支持透明度和多图层等功能,而PNG格式则是一种无损压缩的图像文件格式&#x…

从零开始Vue3+Element Plus后台管理系统(九)——使用API协作平台Mock数据

截止目前,本项目用了2个接口,一个登录,一个获取列表数据。接下来想做的页面和功能,为了看起来更真实,就需要增加更多的模拟数据。 Mock语法写得有些随意,看起来还是很假 😁 Mock数据可以使用M…

认识IPv6---寻址模式与地址类型与格式

本文目录 1、IPv6寻址模式1.1、单播(unicast)1.1、组播(multicast)1.1、任播(Anycast) 2、IPv6地址的类型与格式2.1、IPv6地址的格式2.2、IPv6地址的类型2.2.1、单播地址简介2.2.2、组播地址简介2.2.3、任播地址简介 IPv6的出现,最重要的原因是为了解决IPv4地址不足…

我扛住字节面试了,太干了......

春招进展快 2 个月,今年相比往年我感觉比较卷,很少见到offer收割机的选手。 不管环境如何,持续学习这个是不能放弃的,心态也要稳一稳,坦然面对失败,失败才是常态,成功可能才是偶然的。 好了&a…

LitCTF-web-WP(部分)

前言 CSDN内容合伙人 2023年CSDN新星计划Web安全方向导师。 华为MindSpore截至目前最年轻的优秀开发者 阿里云专家博主、华为网络安全云享专家以及腾讯云自媒体分享计划博主。 吉林师范大学CTF校队——SuD0战队的队长 吉林师范大学网信网安学生负责人 核心粉丝群超过50人 带队…

网址域名查询-域名注册查询工具

域名查找软件 域名查找软件是一种能够帮助用户快速查询域名相关信息的工具。它通常提供了批量域名查询和实时域名查询服务,能够帮助用户查询域名的注册信息、到期时间、所有者信息、域名服务器等多种相关信息。以下是域名查找软件的主要特点: 批量域名查…

roadmap go语言

技术类的Roadmap(路线图)具有许多好处,下面是其中几个主要的好处: 明确目标:Roadmap可以帮助技术团队明确目标和愿景。它提供了一个清晰的计划,使团队成员知道他们正在朝着什么方向前进,并且可…

网络正常但是web、ftp、telnet应用新建连接偶尔卡顿处理方法

目录 问题现象 故障定位 TCP报头 options详解 Opions Kind有哪些 options中的Timestamp详解 TSval & TSecr Timestamp Value的单位是什么 TCP连接的建立与释放 普通三次握手 带时间戳的三次握手 抓包展示带时间戳的tcp会话 WireShark中的时间 VS tcpdump 直接…

KDZD400Q紫外臭氧浓度分析仪

一、产品概述 检测仪用于快速检测多种气体浓度、温湿度测量并超标报 警的场合。采用 2.31 寸高清彩屏实时显示,选用进口品牌的气体传感器,主要检测原理有: 电化学、红外、催化燃烧、热导、PID 光离子等。 可以检测管道中或受限空间、大气环境…

耗时几个月,终于决定把原本想用于商业的系统开源了

前言 嗨,大家好,我是希留,一个被迫致力于全栈开发的老菜鸟。 今天又来给小伙伴们分享一个基于 SpringBoot Vue 实现的前后端分离后台管理系统项目; 简介 这个项目是基于xiliu-tenant脚手架项目搭建而成,原本是帮朋…

USB转UART转串口芯片 GP232RNL国产低成本替代FT232RL/FT232RNL

近期收到很多人咨询FT232RL跟新版FT232RNL两者有什么区别,实际上就是内部做了一点升级,FT232RNL支持Windows11系统,参数并没有改动,完全可以直接替换使用。 今天小编给大家讲讲FT232RNL国产低成本替代芯片–GP232RNL GP232RNL 是…

动态规划:01背包理论基础 一维dp数组(滚动数组)

确定dp数组的定义 在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。 一维dp数组的递推公式 dp[j]为 容量为j的背包所背的最大价值,那么如何推导dp[j]呢? dp[j]可以通过dp[j - weight[i]]推导…

Ubuntu20.04解决疑难杂症问题问题合集

下列问题都是我一次性遇见的倒霉不。 问题一: 安装 linux 版网络调试助手,安装成功后打不开运行文件 解决办法: #通过执行可执行文件打开 # 进入到可执行文件下 cd /opt/mNetAssist/ # 运行主程序 ./mNetAssis 如果出现: libq…

体检中心智能导检系统排队是什么流程?

随着智能信息化建设的推进下,体检中心也越来越规范化、现代化、智能化,智能导检系统,有效完善体检中心服务水平,简化体检流程,节省排队等候时间,提高体检的效率,也能提升体检服务中心的形象。 下…

JVM 执行引擎

执行引擎概述 是Java 虚拟机核心的组成部分之一物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行哪些不被…

2、Flume进阶

目录 1、Flume事务 1.1 Flume事务 1.2 Flume Agent内部原理 1.3 重要组件: 2、 Flume拓扑结构 2.1 简单串联 2.2 复制和多路复用 2.3 负载均衡和故障转移 2.4 聚合 3、开发案例 3.1 复制和多路复用 3.4.2 负载均衡和故障转移 3.3 聚合 1、Flume事务 1.…

在数据化知识经济的时代,你该学会如何经营好自己的知识管理

在当今的数据化知识经济时代,知识管理已经越来越成为了一个必备的技能。在这个竞争激烈的时代,拥有良好的知识管理能力,可以帮助我们更好地应对各种挑战和机遇。 如何经营好自己的知识管理 一、认识知识管理的重要性 知识管理是指通过系统…

【计算机视觉】如何利用 CLIP 做简单的图像分类任务?(含源代码)

要使用 CLIP 模型进行预测,您可以按照以下步骤进行操作: 一、安装 安装依赖:首先,您需要安装相应的依赖项。您可以使用 Python 包管理器(如 pip )安装 OpenAI 的 CLIP 库。 pip install githttps://gith…