2023SpringBoot教学课件 第3讲 Spring Boot日志_第1页
2023SpringBoot教学课件 第3讲 Spring Boot日志_第2页
2023SpringBoot教学课件 第3讲 Spring Boot日志_第3页
2023SpringBoot教学课件 第3讲 Spring Boot日志_第4页
2023SpringBoot教学课件 第3讲 Spring Boot日志_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3讲SpringBoot日志fdteachers@163.com第3讲SpringBoot日志3.1

日志框架3.2

日志使用2因为SpringBoot日志框架slf4j实际上采用了“门面模式”。我们所有对日志的操作都是经过slf4j这个接口去调用底层的日志实现来完成的。而这样做的好处就是将底层与上层隔离,我们只需要关注上层的操作,当出现了更优秀的日志底层实现我们也能够及时更换而不影响上层的代码。33.1日志框架3.1.1SpringBoot的日志SpringBoot使用CommonsLogging进行所有内部日志记录,但保留底层日志实现。项目中只要导入spring-boot-starter.jar依赖,就会传递导入spring-boot-starter-logging.jar,从IDEA的Maven面板可以查看依赖关系,如图3-1所示。spring-boot-starter-logging.jar依赖如下三个jar包:logback-classic.jar:它传递依赖于logback-core.jar和slf4j-api.jar。log4j-to-slf4j.jar:它传递依赖于log4j-api.jar和slf4j-api.jar。jul-to-slf4j.jar:它传递依赖于slf4j-api.jar。43.1.1SpringBoot的日志市面上常见的日志框架有很多,比如:SLF4J(SimpleLoggingFacadeforJava)、Log4j、Log4j2、Logback、JakartaCommonLogging(JCL)、java.util.logging(JUL)、jboss-logging等。这些日志框架又可分为日志门面和日志实现,如表3-1所示。左边选一个门面(抽象层),右边来选一个实现。SpringBoot底层是Spring框架,Spring框架默认使用JCL,spring-boot-starter-logging采用了SLF4j+Logback的组合形式,其中SLF4j作为日志门面,Logback作为日志实现,开发者通常不需要直接操作日志实现的API。SpringBoot默认会添加SLF4J依赖(slf4j-api.jar)和Logback依赖(logback-core.jar和slf4j-api.jar)。56日志门面技术日志框架出现的历史顺序:Log4j→JUL→JCL→slf4j→logback→log4j2上述日志框架可以分为两类:一是提供对外接口的日志门面,包括Slf4j和CommonsLogging(JCL)二是提供具体实现的日志系统,也可称为日志框架,包括Log4j、JUL、Logback、Log4j2JCL:JakartaCommonsLogging,是Apache提供的一个通用日志API,它为多个Java日志实现提供统一的接口这种模式也称之为门面模式,这其实也是一个日志接口,底层使用log4j或JDK

Logging实现73.1.1SpringBoot的日志

SpringBoot框架需要整合大量第三方框架,而这些框架的底层可能会使用JCL、Log4j、JUL等日志。从依赖关系中可以看到,log4j-to-slf4j.jar用来将Log4j日志路由到SLF4J,jul-to-slf4j.jar用来将JUL日志路由到SLF4J。SpringBoot日志抽象层的示意如图3-2所示。

SpringBoot能自动适配日志,底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要将这个框架依赖的日志框架移除掉,这样即可将底层日志实现改为使用其他框架。8为什么要使用SLF4J而不是Log4Jslf4j不同于其他日志类库,与其它有很大的不同。slf4j(simpleloggingfacadeforjava)不是一个真正的日志实现,而是一个抽象层(abstractionlayer),也可以理解为一个接口,它是一种适配器的实现方式,它本身不具有输出日志的功能,输出日志还是由log4j、logback等这样的日志组件来进行输出。如下图描述slf4j和log4j的关系9SLF4J(SimpleLoggingFacadeforJava)用作各种日志框架(java.util.logging,logback,log4j,log4j2)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架,是一款Java程序编写的日志门面框架,其本身定义了统一的日志接口,且对不同的日志实现框架进行抽象化,我们的应用只需要跟SLF4J进行沟通,而不需要跟具体实现框架直接沟通,从而调用具体实现框架的相关方法进行日志记录。这样我们可以方便的切换日志的实现框架,且无需改动我们的应用,这也是门面模式的优点。Slf4j可以与客户端解耦1011slf4j(SimpleloggingFacadeforJava)简单日志门面,日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,没有任何日志实现,只有一个jar包(slf4j-api.jar)log4j和logback是具体的日志框架。这两个日志框是同一个作者开发,后者性能更高。logbak直接实现slf4j接口,性能更高springboot默认日志框架为logback1213为什么要学习日志门面?面向接口开发,不再依赖具体的实现类,减少代码的耦合项目通过导入不同的日志实现类,可以灵活的切换日志框架统一API,方便开发者学习和使用统一配置便于项目日志的管理143.1.2Logback简介

Logback日志框架是由log4j创始人开发的另一套开源日志组件,是SpringBoot默认选择的日志实现,体系非常强大,提供了logback-core、logback-classic和logback-access三个模块供开发者使用。logback-core:是Logback的基础模块,是其它两个模块的基础模块。

logback-classic:可看成是Log4j的一个改进版本,此外logback-classic完整实现SLF4JAPI使开发者可以在其他日志框架(如Log4j)之间自由切换。logback-access:与Servlet容器(如Tomcat)集成,以提供HTTP访问日志功能。153.2日志使用3.2.1默认日志格式SpringBoot项目启动后,默认看到如图3-3所示的界面。从上图可以看到,Spring的Logo部分是SpringBoot框架自带的,日志格式大致如下:时间日期、日志级别、进程ID、分隔符、线程名称、记录器名称、日志内容。163.2.2日志级别在SpringBoot默认应用日志配置中,只会记录ERROR、WARN和INFO级别的日志消息,当然也可以指定日志级别进行日志输出,如果指定了日志级别,那么只会对应输出高于指定级别的日志信息。SpringBoot中日志级别如下:TRACE<DEBUG<INFO<WARN<ERROR。

下面通过示例来讲解SpringBoot日志的用法。(1)使用SpringInitializr方式创建一个名为chapter03的SpringBoot项目。(2)在项目的测试类Chapter03ApplicationTests中添加日志记录器Logger,并在contextLoads()测试方法中通过Logger调用相应级别的方法,代码如下所示:

运行测试方法contextLoads(),控制台输出的日志信息,如图3-4所示。17@SpringBootTestclassChapter03ApplicationTests{

//日志记录器

Loggerlogger=LoggerFactory.getLogger(getClass());

@Test

voidcontextLoads(){

//日志的级别,由低到高:trace<debug<info<warn<error//可调整输出日志级别;日志就只在这个级别以后的高级别生效

logger.trace("……这是trace日志……");

logger.debug("……这是debug日志……");

//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别

logger.info("……这是info日志……");

logger.warn("……这是warn日志……");

logger.error("……这是error日志……");}}注意:日志对象Logger属于org.slf4j包下的,不要导错包183.2.2日志级别改变日志的设置级别。可以通过debug=true或trace=true等属性改变整个SpringBoot核心的日志级别;还可通过logging.level.<logger-name>=<level>属性设置指定日志的日志级别,其中<logger-name>代表日志名,通常就是包名或全限定类名,<level>则可以是trace、debug、info、warn和error等级别。

在perties配置文件中,设置日志级别为trace,设置如下:运行测试方法contextLoads(),控制台输出的日志信息,如图3-5所示。19#设置com.yzpc包下的类以trace级别输出.yzpc=trace日志级别的分类与使用trace:微量,少许的意思,级别最低;debug:需要调试时候的关键信息打印;info:普通的打印信息;warn:警告,不影响使⽤,但需要注意的问题;error:错误信息,级别较⾼的错误⽇志信息;fatal:致命的,因为代码异常导致程序退出执⾏的事件。(此级别日志只能由系统自行打印203.2.3日志文件输出默认情况下,SpringBoot只会将日志消息输出到控制台,并不会将日志写入日志文件。如果要将日志输出到文件,只需在perties文件或application.yml文件内设置如下两个属性之一。

:设置日志文件,这里可以设置文件的绝对路径,也可设置文件的相对路径,如=my.log。logging.file.path:设置日志目录,设置好目录后,会在设置目录文件夹下创建一个spring.log文件,如logging.file.path=/D:/log。

上述两个属性,如只设置一个,SpringBoot应用会默认读取该配置;如果同时设置,只有会生效。213.2.3日志文件输出下面通过示例来讲解SpringBoot的日志文件输出。(1)不指定路径在当前项目根目录下生成日志文件

在chapter03项目的perties配置文件中,设置日志文件的名称,配置如下:

运行测试方法contextLoads(),控制台输出相应日志信息,查看chapter03项目的根目录,可以看到my.log的日志文件,打开my.log即可看到日志信息,如图3-6所示。22#不指定路径在当前项目下生成my.log日志=my.log3.2.3日志文件输出

(2)指定日志文件的输出目录将perties配置文件的的属性行注释掉,添加配置如下:运行测试方法contextLoads(),控制台输出相应日志信息,查看chapter03的根目录,可以看到生成一个SpringLogs的文件夹,里面有日志文件spring.log,如图3-7所示。23#指定日志文件的输出目录,使用spring.log作为默认文件logging.file.path=SpringLogs/3.2.3日志文件输出

(3)自定义路径和文件名生成日志文件

在perties配置文件中,屏蔽或删除logging.file.path属性行,添加的属性行,配置如下:

运行测试方法contextLoads(),控制台输出相应日志信息,查看d:/log/目录,可以看到同样生成了my.log日志文件。24#可以指定完整的路径和文件名生成日志文件=d:/log/my.log3.2.4自定义日志格式将日志输出到文件时,可通过logging.pattern.file属性和logging.pattern.console属性指定日志文件和控制台的输出格式,输出的日志格式如下。说明如下:

%d:表示日期时间。

%thread:表示线程名。

%-5level:表示级别从左显示5个字符宽度。

%logger{50}:表示logger名字最长50个字符,否则按照句点分割。

%msg:表示日志消息。

%n:表示换行符。25%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n3.2.4自定义日志格式

在chapter03项目的perties配置文件中,添加如下配置:

运行测试方法contextLoads(),控制台输出日志信息以及日志文件中的信息,如图3-8所示。26#在控制台输出的日志的格式logging.pattern.console=%d{yyyy-MM-dd}[%thread]%-5level%logger{50}-%msg%n

#指定文件中日志输出的格式

logging.pattern.file=%d{yyyy-MM-dd}---[%thread]---%-5level---%logger{50}---%msg%n3.2.5基于XML配置日志1.SpringBoot的默认日志实现

在SpringBoot中默认使用Logback日志,如图3-9所示。SpringBoot为Logback提供了一些通用的配置文件,这些文件位于org/springframework/boot/logging/logback/路径下,其中常用的有如下几个:

defaults.xml:提供了转换规则及各种通用配置。

console-appender.xml:定义了一个ConsoleAppender,用于将日志输出到控制台。

file-appender.xml:定义一个RollingFileAppender,用于将日志输出到文件。

SpringBoot通过base.xml配置文件,加载上述的配置文件来实现日志。273.2.5基于XML配置日志2.控制台输出日志

在chapter03项目的src/main/resources目录下创建一个logback-spring.xml文件,注释掉perties文件中的属性值,logback-spring.xml配置文件的设置如下内容。

运行测试方法contextLoads(),控制台输出日志信息,如图3-10所示。28<?xmlversion="1.0"encoding="utf-8"?><configuration>

<!--控制台输出-->

<appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">

<encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

<!--格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->

<pattern>%date[%thread]%-5level%logger{50}-%msg%n

</pattern>

<charset>UTF-8</charset>

</encoder>

</appender>

<!--日志输出级别,等同于在配置文件中设置logging.pattern.level-->

<rootlevel="info">

<appender-refref="STDOUT"/>

</root>

<loggername="com.yzpc"level="debug"/>

</configuration>3.2.5基于XML配置日志3.日志文件输出

控制台输出日志文件的形式一般是在开发环境下使用,一般生产环境下需要将日志输出到日志文件进行日志分析,并将日志根据级别输出到不同日志文件中,如果日志文件太大,可以设置日志文件根据大小分隔,配置如下所示。

运行测试方法contextLoads(),在项目所在磁盘的根路径下,可以看到生成一个log文件夹,该文件中有按照日期生成的日志文件。293.2.6使用Log4j2日志实现

如果让SpringBoot底层使用Log4j2,在pom.xml文件中去除Logback依赖库,并添加Log4j2依赖库,依赖修改如下:

这里并没有单独去除Logback依赖库,SpringBoot为Log4j2也提供了对应的Starter,所以可以直接去除SpringBoot默认的日志Strater。添加spring-boot-starter-log4j2.jar依赖,它会传递性添加它所依赖的Log4j2依赖库和SLF4J依赖库,从IntelliJIDEA的Maven面板上可以看到依赖的JAR包,如图3-11所示。

通过上面的配置,将项目的底层日志框架改成了Log4j2,得益于SpringBoot日志的抽象机制。30<dependencies><dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<exclusions>

<!--去除spring-boot-starter-logging依赖-->

<exclusion>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论