深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理

这篇具有很好参考价值的文章主要介绍了深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

了解日志框架

日志框架的历史可以追溯到计算机编程的早期。在早期的编程语言中,如 C 和 Pascal,程序员通常使用 printf 或 fprintf 函数将程序的状态信息输出到控制台或文件中,以便调试和排查问题。

随着计算机应用程序的不断发展,人们对日志管理的需求越来越高。当我们在开发项目时,如果我们添加日志输出功能,我们就能更轻松的管理和维护项目:

  1. 日志框架可以提供更加丰富的日志管理功能,例如,可以设置日志的级别、输出位置、输出格式等。
  2. 日志框架可以记录应用程序的运行状态,当出现问题时,可以通过查看日志信息来定位问题所在,从而更加高效地进行调试和排查。
  3. 通过使用日志框架,程序员可以更加清晰地了解代码的运行情况,从而提高代码的可读性和可维护性。
  4. 对于大型应用程序,日志框架可以提供性能监控和优化功能,帮助程序员找出性能瓶颈并进行优化。

综上所述,使用日志框架可以帮助程序员更加高效地管理日志、调试和排查问题、提高代码的可读性和可维护性,以及优化应用程序的性能。

常见日志框架

常见的 Java 日志框架有 Log4j(reload4j)、Log4j2、Logback、JUL(JDK Logging)、SLF4J 等:

日志的接口抽象层 日志的实现框架
JCL(Jakarta Commons Logging)
Jboos-loggingslf4j(Simple Logging Facade For Java)
JUL(java.util.logging)
Log4j(reload4j)
Log4j2
Logback

其中,Log4j 是 Apache 组织开发的日志框架,拥有丰富的配置选项和功能,但是在高并发情况下有可能出现性能问题,而由于2022年的 Log4j 出现的漏洞原因,Reload4j 成为 Log4j 的修复版本。Log4j2 是 Log4j 的升级版,继承了 Log4j 的优点,同时解决了性能问题,并添加了一些新的功能。Logback 是由 Log4j 的创始人 Ceki Gülcü 开发的日志框架,拥有和 Log4j 类似的配置方式,但是在性能和稳定性方面优于 Log4j。JUL(JDK Logging)是 JDK 自带的日志框架,使用方便,但是功能相对较弱。

SLF4J 是一个日志框架的门面(Facade)或者说抽象层,它不是具体的日志实现,而是为其他日志框架提供一个统一的接口,方便应用在不同的日志框架之间切换,(类似于 JDBC 和数据库的驱动之间的关系),从而达到面向 SLF4J 接口编程的目的。使用 SLF4J 可以有效地减少代码中对具体日志实现的依赖。

日志具体的实现框架在项目中可以配合日志的接口抽象层组合使用,也可以单独使用,常用的日志框架组合包括:

  1. SLF4J + Logback:SLF4J 是一个抽象日志接口,可以在不改变应用程序代码的情况下切换不同的日志实现,而 Logback 则是一个高效可靠的日志框架,可以与 SLF4J 无缝集成。
  2. Log4j2:Log4j2 是 Apache 开源组织发布的日志框架,具有高性能、异步日志、插件化等特点,可以与 Spring、Hibernate、MyBatis 等其他框架集成。
  3. Commons Logging + Log4j:Commons Logging 是一个通用的日志接口,可以在运行时自动选择最合适的日志实现,而 Log4j 则是一个流行的日志框架,可以与 Commons Logging 集成,提供可靠的日志记录功能。
  4. Log4j2 + SLF4J:Log4j2 与 SLF4J 结合使用,可以提供高性能的日志记录功能,并支持异步日志、插件化等特性。
  5. JUL(Java Util Logging):JUL 是 Java 标准库自带的日志框架,可以通过配置文件或编程方式进行配置,支持多种输出方式(控制台、文件、邮件等),但缺乏灵活性和可扩展性。

面向 SLF4J 编程

SLF4J 接口规范

SLF4J 官网:https://www.slf4j.org/

SLF4J 手册:https://www.slf4j.org/manual.html

开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。每一个日志的实现框架都有自己的配置文件。

SLF4J 就是基于此想法实现的一种日志记录框架,向外提供了Java 程序中的统一日志接口,可以方便地与各种日志系统(如 Log4j、Logback 和 java.util.logging、Log4j2)进行集成。

使用 SLF4J 以后,配置文件还是日志实现框架自己的配置文件。要切换日志记录框架,只需将 SLF4J 绑定为指定的日志框架即可。具体思想如图所示:

深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理

其他框架统一转换为 SLF4J 框架

通常,在我们的项目中所依赖的一些组件使用的是 SLF4J 以外的日志框架,如 Log4j、Log4j2 、JCL 和 JUL 等。为了应对这种情况,我们需要将其他框架统一转换为 SLF4J 日志框架,因此,SLF4J 为我们附带了用于处理这种情况的几个桥接模块,使用桥接器可以实现将对 Log4j、Log4j2 、JCL 和 JUL 等日志框架的调用转换为对 SLF4J 框架的调用,也就是狸猫换太子,之后在 SLF4J 框架之下再使用具体的日志框架。原理如图所示:

深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理

总体步骤如下:

  1. 首先,将原有的日志框架依赖进行排除
  2. 其次,添加新的日志框架的依赖;
  3. 使用桥接模块将记录日志框架桥接到 Slf4j,完成无感替换。

以下是将一些常见日志框架转换为 SLF4J 的方法:

  • Log4j 转换为 SLF4J 如果你使用的是 Log4j,可以使用 Log4j-to-SLF4J适配器,将 Log4j API 转换为 SLF4J API。只需要将 Log4j 的 jar 包替换为 Log4j-to-SLF4J 的 jar 包即可。
  • JUL(java.util.logging)转换为 SLF4J 如果你使用的是 JUL,可以使用 jul-to-slf4j 适配器,将 JUL API 转换为 SLF4J API。只需要添加 jul-to-slf4j 的 jar 包到你的项目中即可。
  • Logback 转换为 SLF4J 如果你使用的是 Logback,无需进行转换,因为 Logback 本身就实现了 SLF4J API。

当你将其他日志框架转换为 SLF4J 后,再使用 SLF4J 提供的各种日志实现,就可以统一管理你的应用的日志记录。文章来源地址https://www.toymoban.com/news/detail-492652.html

到了这里,关于深入理解 SpringBoot 日志框架:从入门到高级应用——(一)日志框架原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “深入理解Spring框架的核心原理与应用“

    标题:深入理解Spring框架的核心原理与应用 摘要:本文旨在深入探讨Spring框架的核心原理与应用。我们将介绍Spring框架的主要特点、IOC容器的工作原理、AOP的实现方式以及Spring MVC的应用等内容,并通过示例代码来演示Spring框架的使用。 Spring框架是一款非常流行的Java开发框架

    2024年02月16日
    浏览(37)
  • “深入理解SpringBoot:从入门到精通的几个关键要点“

    标题:深入理解Spring Boot:从入门到精通 摘要:本文将深入探讨Spring Boot的关键要点,帮助读者从入门到精通。我们将从Spring Boot的基本概念开始,介绍自动配置、起步依赖、注解驱动开发等特性,并通过示例代码演示如何使用Spring Boot构建一个简单的Web应用程序。 正文: S

    2024年02月14日
    浏览(29)
  • SpringBoot篇——SpringBoot微服务理解、SpringBoot和SSM框架区别等技术点,带你入门SpringBoot,一篇搞定!

    一、什么是为微服务 微服务是一种 架构风格 ,打破了all in one的架构方式,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合。 可以通过http的方式进行互通,服务可以独立部署和扩展,每个服务都提供一个坚实的模块边界,甚至不同的服务可以用

    2024年02月04日
    浏览(27)
  • 深入理解Nginx日志级别

    Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于提供网站和应用服务。它的强大功能之一是灵活的日志记录能力,允许管理员根据需要配置不同的日志级别。正确理解和使用这些日志级别对于监控、调试和保障你的服务稳定运行至关重要。本文旨在深入介绍 Nginx 支持的

    2024年03月13日
    浏览(33)
  • 深入理解Matplotlib:实现高级数据可视化

    Matplotlib 是一款极其强大的 Python 数据可视化库。尽管其使用起来可能稍显复杂,但无疑,Matplotlib 是创建高质量图形的关键工具之一。在上一篇文章中,我们介绍了 Matplotlib 的基础知识,包括创建和自定义基础图形等。而在这篇文章中,我们将深入讨论 Matplotlib 的一些高级特

    2024年02月16日
    浏览(24)
  • 深入理解高级加密标准(Advanced Encryption Standard)

    title: 深入理解高级加密标准(Advanced Encryption Standard) date: 2024/4/23 20:04:36 updated: 2024/4/23 20:04:36 tags: AES概述 加密原理 优势特点 算法详解 安全性 应用实践 案例分析 AES的历史和背景 历史:  高级加密标准(Advanced Encryption Standard,AES)是一种对称密钥加密标准,由美国国(A

    2024年04月24日
    浏览(24)
  • 深入理解Python中的日志记录(Logging)

    🚀  个人主页 :xmp65535 🚀  专栏 :python技术专栏 目录 一、Python Logging 模块概述 二、相关组件 Logger Handler Formatter Filter LogRecord Level 三、基本配置 Formatters格式: 四、记录日志 五、日志记录者(Loggers) logging.getLogger(name=None) 六、处理器(Handlers) logging.Handler() RotatingFileHand

    2024年04月23日
    浏览(27)
  • 深入理解Spring EL表达式的高级功能

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 EL表达式不仅仅局限于基础用法,它还提供了丰富的高级功能。在这篇博客中,我们将揭开这些功能的神秘面纱,让你成为EL表达式的真正大师。 在EL(Expression Language)表达式中,可以使用各种操作符和语法来操作集合

    2024年01月25日
    浏览(35)
  • Linux 深入理解Linux文件系统与日志分析

    文件数据 包含 元信息(即不包含文件名的文件属性)    和    实际数据 文件元信息存储在 inode(索引节点)里, 文件实际数据存储在 block(块)里; 文件名存储在目录块里 stat  文件名   stat  文件名      ls -i 文件名   df -i Linux系统不使用 文件名 识别文件,而 使用 inode号 来识

    2024年04月25日
    浏览(30)
  • 【Java-14】3万字深入理解HashMap集合(高级)

    ​ HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。 ​ JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包