首页 > 其他分享 >SpringBoot教程之日志框架

SpringBoot教程之日志框架

时间:2024-09-22 17:23:25浏览次数:12  
标签:教程 logging SpringBoot 框架 日志 logback 我们

先通俗来理解日志

假设现在我们没有日志框架,那么这个时候我们有一个需求,开发一个大型的系统,那么在我们开发的过程中,我们需要检查一些代码的正确与否、是否正常运行、监控代码运行的状况,这时候我们怎么做?当然,我们在需要检查的地方使用System.out.print("")进行输出相关信息,当然,我们也可以控制流输出到一个文件中,不过这个方式有个问题就是,如果我们需要改动一些输出的格式或者信息,那么我们又要到项目代码的各个地方去修改,非常的麻烦,那么这个时候我们会想到进行改进。

如果改进呢,就是专门写一些输出信息的方法,然后把这些方法打包成一个jar进行引用,这样做是的我们可以对使用的方法进行统一的修改,而且还使得我们可以在其他的项目中接着使用,我们可以说已经有一个日志框架的雏形了。不过这个时候我们又有一些想法,既然已经可以输出一些日志信息了,那么我们想要增加几个高大上的功能,比如异步模式、自动扫描等等功能。这个时候我们对jar进行修改升级,加入了这些功能,这样我们的日志框架有有点样子了,可以说是一个正儿八经的日志框架了。

不过不要高兴的太早,正儿八经的日志框架并不代表成熟,我们还有一个问题需要解决,就是如果我们想要对正在使用的jar包API进行修改升级,这个时候难道我们需要对项目中使用到的地方全部 进行修改么?这样当然不行,所以这个时候日志框架就需要分层,即抽象成和实现层,我们可以像JDBC那样拥有统一的接口层,底层无论使用什么数据库都没关系,我们都可以使用。完成了抽象层和接口层的分离,这个时候的日志框架算是一个成熟的日志框架了。

SpringBoot日志框架选择

开发中存在非常多的日志框架,JUL(java.util.logging),JCL(Apche Commons Logging),Log4j, Log4j2,Logback,SLF4j,jboss-logging等。SpringBoot在框架内容部分使用JCL,spring-boot-starter-logging采用了slf4j+logback的形式,SpringBoot也能自动适配(jul,log4j2,logback)并简化配置,可以进行如下分类

SpringBoot教程之日志框架_配置文件

我们要使用SpringBoot的日志框架,也就是说我们需要一个抽象层和一个实现层,我们这里选择SLF4j作为抽象层,logback作为实现层。这里要说一下的是,SpringBoot底层是Spring框架,Spring框架默认的是JCL作为抽象层。

SLF4j使用

(我们创建新项目中已经帮我们导入了slf4j和logback)如何在系统中使用SLF4j?在开发的时候不应该直接使用日志实现类,应该使用日志的抽象层。具体参考 SLF4J 官方。下图是 SLF4J 结合各种日志框架的官方示例,从图中可以清晰的看出 SLF4J API 永远作为日志的门面,直接应用与应用程序中。

SpringBoot教程之日志框架_配置文件_02

同时 SLF4 官方给出了简单示例。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

需要注意的是,要为系统导入 SLF4J 的 jar 和 日志框架的实现 jar。由于每一个日志的实现框架都有自己的配置文件,所以在使用 SLF4 之后,配置文件还是要使用实现日志框架的配置文件。

思考一个问题

是什么问题呢?这么描述,我们想要写一个SpringBoot项目,日志框架组合我们打算使用Slf4j+logback,然后项目中集成了Spring,Hibernate,MyBatis等等组件依赖,这个时候会有一个问题,就是我们集成的组件框架中存在自己的日志框架,比如Spring自带commons-logging、Hibernate(jboss-logging)等等,那么这个时候,我们的项目里面就像一个日志框架的大杂烩一样,非常的乱,那么我们就需要给我们项目中日志框架做统一,也就是说,不管我依赖的组件自带了什么日志框架,我只要配置我的Slf4j+logback就可以了。

问题当然也有解决办法,这里我们来看看官方文档

SpringBoot教程之日志框架_日志框架_03

也就是说,我们需要分别引入我们组件日志的覆盖层,因为我们想要去除组件中的日志,不可能跑去删除组件的日志框架包,这样会导致组件崩溃,底层源码都被该了还不崩溃,所以我们在删除其他组件的日志框架jar包的时候,需要导入一层覆盖层jar包,这个jar中依旧有原来组件的日志框架的API,组件运行就不会报错,就相当于多做了一层适配,我们调用Slf4j+logback,然后通过这层适配层调用各组件的日志框架。


步骤总结:

排除系统中的其他日志框架。

使用中间包替换要替换的日志框架。

导入我们选择的 SLF4J 实现。


SpringBoot日志关系

我们从我们新创建的项目出发要阐述和研究,这样更方便我们理解和说明,首先我们来看我们新项目中的pom.xml文件中的内容,我们是一个新项目,什么都没引入,这些都是自动引入的内容。

SpringBoot教程之日志框架_配置文件_04

发现pom.xml中引入了starter启动器,其实每个启动器都会引入大量的依赖,那么我们怎么查看呢,有两种方法,第一种如下

SpringBoot教程之日志框架_spring_05

从上面的分析,Spring Boot 对日志框架的使用已经是清晰明了了,我们也可以使用 IDEA 工具查看 Maven 依赖关系,可以清晰的看到日志框架的引用。

SpringBoot教程之日志框架_配置文件_06

SpringBoot教程之日志框架_配置文件_07

可是话的依赖关系是不是眼前一亮,现在,我们可以来看spring-boot-starter这里,找到spring-boot-starter-logging(每个节点都可以双击点击,点击将进入对应的自动配置类)

SpringBoot教程之日志框架_spring_08

进入到spring-boot-starter-logging中,可以看到如下

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.2.4.RELEASE</version>
  <scope>compile</scope>
</dependency>

这就是SpringBoot的日志使用,我们前面博文说过,每一个starter都是一个场景启动器,而这个就是我们SpringBoot用于日志场景的启动器,里面有非常多的依赖

SpringBoot教程之日志框架_日志框架_09

关系总结

SpringBoot底层也是使用slf4j+logback的方式进行日志记录,SpringBoot也把其他日志框架替换成了slf4j,默认的中间替换包如下

SpringBoot教程之日志框架_日志框架_10

如果我们要引入其他的框架,一定要把这个框架的默认日志依赖都移除掉。

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架的依赖的日志框架移除掉。


日志使用

logging.level

用我们新创建的项目直接运行,SpringBoot是帮我们配置了日志的。我们现在测试类中写入如下内容,说明一下的是,这里的顺序是日志的级别,由低到高。我们可以调整输出日志的级别,日志就只会在这个级别及以后的高级别生效。我们先不调整,运行一下这个测试类

SpringBoot教程之日志框架_日志框架_11

默认是输出info级别及以上的日志,也就是说info是我们的root级别,当然我们可以在主配置文件中修改,如下

SpringBoot教程之日志框架_日志框架_12

logging.file.name

SpringBoot教程之日志框架_配置文件_13

当然我们还可以使用logging.path指定我们日志输出的目录,日志文件默认为spring.log。

logging.pattern.console

SpringBoot教程之日志框架_日志框架_14

日志的输出格式如下

  • %d表示日期时间
  • %thread表示线程名
  • %-5level级别从左显示5个字符串
  • %logger{50}表示从logger名字最长50个字符,否则按照句点分隔
  • %n换行符

不过这其实是日志的一小部分功能,如果我们还需要使用异步日志等功能的话,那么我们可能需要专门进行编写日志的配置文件,可能一听到编写日志配置文件就头疼,其实不要担心,不难的,官方日志配置文件说明

SpringBoot教程之日志框架_配置文件_15

也就是我们使用的是logback,所以我们可以创建一个logback.xml放在resources目录下,里面写着我们日志配置的相关内容,没错,直接创建就可以了,不需要配置什么,SpringBoot就会自动识别(主要要和官网的命名一样哦)


这里值得说明一下的是,我们可以创建另一种命名logback-spring.xml,这个文件依然可以被SpringBoot自动识别,但是和logback.xml的区别就是,在这个里面我们可以使用SpringBoot的高级profile功能(profile就是我们之前说的环境分发)

SpringBoot教程之日志框架_配置文件_16

切换日志框架

如果我们想要切换日志框架(当然不建议哈,logback挺好用的,这里只是教你如果有需要的话怎么去做,依旧是打开Diagrams,然后进行如下步骤)

SpringBoot教程之日志框架_配置文件_17

然后在依赖中就会被排除掉,这个时候我们只要在pom.xml中引入我们想要换的那个日志实现层就可以了,切换的依据记得按照上面说的各种日志框架的配置使用,不要切换错了哦。

标签:教程,logging,SpringBoot,框架,日志,logback,我们
From: https://blog.51cto.com/u_16494136/12080928

相关文章

  • Spring Boot 注解拦截器实现审计日志功能
    引言在业务系统中,审计日志记录至关重要。系统需要记录用户的操作日志,特别是在用户操作数据库修改、查询、删除重要数据时,系统应追踪操作人的身份、操作的对象、操作的时间等关键数据。这不仅对运维、合规性有帮助,同时也能提高系统的可审计性和安全性。本篇文章将深入讲解......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
      学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
      学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • Shiro漏洞复现-springboot运行报错的解决 && 项目本地tomcat部署
    一、Springboot项目运行出现的种种问题:首先需要下载环境代码,来源Github等开源平台,下载解压后使用IDEA打开,由于Shiro通常与Springboot项目捆绑,所以通常运行需要Springboot环境,如下图所示:运行时可能会出现如下报错:unabletostartServletWebServerApplicationcontextd......
  • 【计算机专业毕设最新Java必过毕设选题2025】基于springboot的高校跳蚤市场管理系统(源
    作品简介 Hi,各位同学好呀!今天向大家分享一个最新完成的高质量毕业设计项目作品基于springboot的XXX管理系统项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术前端:html/js/css后端:springboot数据库:MySql服务器:apache-tomcat......
  • 帝国cms怎么搭建网站教程-帝国CMS搭建安装教程详细步骤
    搭建一个基于帝国CMS(EmpireCMS,ECMS)的网站需要经历几个主要步骤:安装帝国CMS、配置网站环境、创建网站内容和管理网站。以下是一个简化的教程,指导你如何从零开始搭建一个帝国CMS网站。第一步:安装帝国CMS下载安装包访问帝国CMS官方网站或其他可信来源下载最新版本的安装包。......
  • 帝国cms安装默认密码 帝国cms安装教程
    帝国CMS是一款广泛使用的网站内容管理系统,其安装过程通常包括以下几个步骤:安装教程:上传文件解压帝国CMS安装包。将upload文件夹中的所有文件上传至您的网站根目录。访问安装脚本在浏览器中访问http://您的域名/e/install来启动安装向导。确认环境检查服务器环......
  • 帝国cms网站建站程序安装教程
    帝国CMS网站建站程序安装教程工具/原料已搭建好PHP环境的服务器或者本地测试环境。帝国CMS建站程序安装包。方法/步骤下载帝国CMS安装包百度搜索“帝国CMS官网”,进入帝国CMS官网。找到下载页面,根据需要选择对应的版本下载程序安装包。解压并上传文件解压帝国CMS......
  • 【已解决】log4j没有生成日志文件、 生成日志文件、自动写入日志、log4j日志没有输出
    接上一篇:log4j2 运行项目后不会自动生成日志文件、或不会自动向日志文件中写入日志 解决方法:加入:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>......
  • GEE教程:利用sentinel-2数据进行ndwi和ndci指数的计算和下载
    目录简介函数normalizedDifference(bandNames)Arguments:Returns: ImageExport.image.toDrive(image, description, folder, fileNamePrefix, dimensions, region, scale, crs, crsTransform, maxPixels, shardSize, fileDimensions, skipEmptyTiles, file......