2023SpringBoot教學(xué)課件 第3講 Spring Boot日志_第1頁
2023SpringBoot教學(xué)課件 第3講 Spring Boot日志_第2頁
2023SpringBoot教學(xué)課件 第3講 Spring Boot日志_第3頁
2023SpringBoot教學(xué)課件 第3講 Spring Boot日志_第4頁
2023SpringBoot教學(xué)課件 第3講 Spring Boot日志_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

日志框架3.2

日志使用2因?yàn)镾pringBoot日志框架slf4j實(shí)際上采用了“門面模式”。我們所有對日志的操作都是經(jīng)過slf4j這個接口去調(diào)用底層的日志實(shí)現(xiàn)來完成的。而這樣做的好處就是將底層與上層隔離,我們只需要關(guān)注上層的操作,當(dāng)出現(xiàn)了更優(yōu)秀的日志底層實(shí)現(xiàn)我們也能夠及時更換而不影響上層的代碼。33.1日志框架3.1.1SpringBoot的日志SpringBoot使用CommonsLogging進(jìn)行所有內(nèi)部日志記錄,但保留底層日志實(shí)現(xiàn)。項(xiàng)目中只要導(dǎo)入spring-boot-starter.jar依賴,就會傳遞導(dǎo)入spring-boot-starter-logging.jar,從IDEA的Maven面板可以查看依賴關(guān)系,如圖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等。這些日志框架又可分為日志門面和日志實(shí)現(xiàn),如表3-1所示。左邊選一個門面(抽象層),右邊來選一個實(shí)現(xiàn)。SpringBoot底層是Spring框架,Spring框架默認(rèn)使用JCL,spring-boot-starter-logging采用了SLF4j+Logback的組合形式,其中SLF4j作為日志門面,Logback作為日志實(shí)現(xiàn),開發(fā)者通常不需要直接操作日志實(shí)現(xiàn)的API。SpringBoot默認(rèn)會添加SLF4J依賴(slf4j-api.jar)和Logback依賴(logback-core.jar和slf4j-api.jar)。56日志門面技術(shù)日志框架出現(xiàn)的歷史順序:Log4j→JUL→JCL→slf4j→logback→log4j2上述日志框架可以分為兩類:一是提供對外接口的日志門面,包括Slf4j和CommonsLogging(JCL)二是提供具體實(shí)現(xiàn)的日志系統(tǒng),也可稱為日志框架,包括Log4j、JUL、Logback、Log4j2JCL:JakartaCommonsLogging,是Apache提供的一個通用日志API,它為多個Java日志實(shí)現(xiàn)提供統(tǒng)一的接口這種模式也稱之為門面模式,這其實(shí)也是一個日志接口,底層使用log4j或JDK

Logging實(shí)現(xiàn)73.1.1SpringBoot的日志

SpringBoot框架需要整合大量第三方框架,而這些框架的底層可能會使用JCL、Log4j、JUL等日志。從依賴關(guān)系中可以看到,log4j-to-slf4j.jar用來將Log4j日志路由到SLF4J,jul-to-slf4j.jar用來將JUL日志路由到SLF4J。SpringBoot日志抽象層的示意如圖3-2所示。

SpringBoot能自動適配日志,底層使用slf4j+logback的方式記錄日志,引入其他框架的時候,只需要將這個框架依賴的日志框架移除掉,這樣即可將底層日志實(shí)現(xiàn)改為使用其他框架。8為什么要使用SLF4J而不是Log4Jslf4j不同于其他日志類庫,與其它有很大的不同。slf4j(simpleloggingfacadeforjava)不是一個真正的日志實(shí)現(xiàn),而是一個抽象層(abstractionlayer),也可以理解為一個接口,它是一種適配器的實(shí)現(xiàn)方式,它本身不具有輸出日志的功能,輸出日志還是由log4j、logback等這樣的日志組件來進(jìn)行輸出。如下圖描述slf4j和log4j的關(guān)系9SLF4J(SimpleLoggingFacadeforJava)用作各種日志框架(java.util.logging,logback,log4j,log4j2)的簡單外觀或抽象,允許最終用戶在部署時插入所需的日志框架,是一款Java程序編寫的日志門面框架,其本身定義了統(tǒng)一的日志接口,且對不同的日志實(shí)現(xiàn)框架進(jìn)行抽象化,我們的應(yīng)用只需要跟SLF4J進(jìn)行溝通,而不需要跟具體實(shí)現(xiàn)框架直接溝通,從而調(diào)用具體實(shí)現(xiàn)框架的相關(guān)方法進(jìn)行日志記錄。這樣我們可以方便的切換日志的實(shí)現(xiàn)框架,且無需改動我們的應(yīng)用,這也是門面模式的優(yōu)點(diǎn)。Slf4j可以與客戶端解耦1011slf4j(SimpleloggingFacadeforJava)簡單日志門面,日志系統(tǒng)的實(shí)現(xiàn)進(jìn)行了具體的抽象化,只提供了統(tǒng)一的日志使用接口,沒有任何日志實(shí)現(xiàn),只有一個jar包(slf4j-api.jar)log4j和logback是具體的日志框架。這兩個日志框是同一個作者開發(fā),后者性能更高。logbak直接實(shí)現(xiàn)slf4j接口,性能更高springboot默認(rèn)日志框架為logback1213為什么要學(xué)習(xí)日志門面?面向接口開發(fā),不再依賴具體的實(shí)現(xiàn)類,減少代碼的耦合項(xiàng)目通過導(dǎo)入不同的日志實(shí)現(xiàn)類,可以靈活的切換日志框架統(tǒng)一API,方便開發(fā)者學(xué)習(xí)和使用統(tǒng)一配置便于項(xiàng)目日志的管理143.1.2Logback簡介

Logback日志框架是由log4j創(chuàng)始人開發(fā)的另一套開源日志組件,是SpringBoot默認(rèn)選擇的日志實(shí)現(xiàn),體系非常強(qiáng)大,提供了logback-core、logback-classic和logback-access三個模塊供開發(fā)者使用。logback-core:是Logback的基礎(chǔ)模塊,是其它兩個模塊的基礎(chǔ)模塊。

logback-classic:可看成是Log4j的一個改進(jìn)版本,此外logback-classic完整實(shí)現(xiàn)SLF4JAPI使開發(fā)者可以在其他日志框架(如Log4j)之間自由切換。logback-access:與Servlet容器(如Tomcat)集成,以提供HTTP訪問日志功能。153.2日志使用3.2.1默認(rèn)日志格式SpringBoot項(xiàng)目啟動后,默認(rèn)看到如圖3-3所示的界面。從上圖可以看到,Spring的Logo部分是SpringBoot框架自帶的,日志格式大致如下:時間日期、日志級別、進(jìn)程ID、分隔符、線程名稱、記錄器名稱、日志內(nèi)容。163.2.2日志級別在SpringBoot默認(rèn)應(yīng)用日志配置中,只會記錄ERROR、WARN和INFO級別的日志消息,當(dāng)然也可以指定日志級別進(jìn)行日志輸出,如果指定了日志級別,那么只會對應(yīng)輸出高于指定級別的日志信息。SpringBoot中日志級別如下:TRACE<DEBUG<INFO<WARN<ERROR。

下面通過示例來講解SpringBoot日志的用法。(1)使用SpringInitializr方式創(chuàng)建一個名為chapter03的SpringBoot項(xiàng)目。(2)在項(xiàng)目的測試類Chapter03ApplicationTests中添加日志記錄器Logger,并在contextLoads()測試方法中通過Logger調(diào)用相應(yīng)級別的方法,代碼如下所示:

運(yùn)行測試方法contextLoads(),控制臺輸出的日志信息,如圖3-4所示。17@SpringBootTestclassChapter03ApplicationTests{

//日志記錄器

Loggerlogger=LoggerFactory.getLogger(getClass());

@Test

voidcontextLoads(){

//日志的級別,由低到高:trace<debug<info<warn<error//可調(diào)整輸出日志級別;日志就只在這個級別以后的高級別生效

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

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

//SpringBoot默認(rèn)給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認(rèn)規(guī)定的級別

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

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

logger.error("……這是error日志……");}}注意:日志對象Logger屬于org.slf4j包下的,不要導(dǎo)錯包183.2.2日志級別改變?nèi)罩镜脑O(shè)置級別。可以通過debug=true或trace=true等屬性改變整個SpringBoot核心的日志級別;還可通過logging.level.<logger-name>=<level>屬性設(shè)置指定日志的日志級別,其中<logger-name>代表日志名,通常就是包名或全限定類名,<level>則可以是trace、debug、info、warn和error等級別。

在perties配置文件中,設(shè)置日志級別為trace,設(shè)置如下:運(yùn)行測試方法contextLoads(),控制臺輸出的日志信息,如圖3-5所示。19#設(shè)置com.yzpc包下的類以trace級別輸出.yzpc=trace日志級別的分類與使用trace:微量,少許的意思,級別最低;debug:需要調(diào)試時候的關(guān)鍵信息打印;info:普通的打印信息;warn:警告,不影響使?,但需要注意的問題;error:錯誤信息,級別較?的錯誤?志信息;fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)?的事件。(此級別日志只能由系統(tǒng)自行打印203.2.3日志文件輸出默認(rèn)情況下,SpringBoot只會將日志消息輸出到控制臺,并不會將日志寫入日志文件。如果要將日志輸出到文件,只需在perties文件或application.yml文件內(nèi)設(shè)置如下兩個屬性之一。

:設(shè)置日志文件,這里可以設(shè)置文件的絕對路徑,也可設(shè)置文件的相對路徑,如=my.log。logging.file.path:設(shè)置日志目錄,設(shè)置好目錄后,會在設(shè)置目錄文件夾下創(chuàng)建一個spring.log文件,如logging.file.path=/D:/log。

上述兩個屬性,如只設(shè)置一個,SpringBoot應(yīng)用會默認(rèn)讀取該配置;如果同時設(shè)置,只有會生效。213.2.3日志文件輸出下面通過示例來講解SpringBoot的日志文件輸出。(1)不指定路徑在當(dāng)前項(xiàng)目根目錄下生成日志文件

在chapter03項(xiàng)目的perties配置文件中,設(shè)置日志文件的名稱,配置如下:

運(yùn)行測試方法contextLoads(),控制臺輸出相應(yīng)日志信息,查看chapter03項(xiàng)目的根目錄,可以看到my.log的日志文件,打開my.log即可看到日志信息,如圖3-6所示。22#不指定路徑在當(dāng)前項(xiàng)目下生成my.log日志=my.log3.2.3日志文件輸出

(2)指定日志文件的輸出目錄將perties配置文件的的屬性行注釋掉,添加配置如下:運(yùn)行測試方法contextLoads(),控制臺輸出相應(yīng)日志信息,查看chapter03的根目錄,可以看到生成一個SpringLogs的文件夾,里面有日志文件spring.log,如圖3-7所示。23#指定日志文件的輸出目錄,使用spring.log作為默認(rèn)文件logging.file.path=SpringLogs/3.2.3日志文件輸出

(3)自定義路徑和文件名生成日志文件

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

運(yùn)行測試方法contextLoads(),控制臺輸出相應(yīng)日志信息,查看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個字符,否則按照句點(diǎn)分割。

%msg:表示日志消息。

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

在chapter03項(xiàng)目的perties配置文件中,添加如下配置:

運(yùn)行測試方法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的默認(rèn)日志實(shí)現(xiàn)

在SpringBoot中默認(rèn)使用Logback日志,如圖3-9所示。SpringBoot為Logback提供了一些通用的配置文件,這些文件位于org/springframework/boot/logging/logback/路徑下,其中常用的有如下幾個:

defaults.xml:提供了轉(zhuǎn)換規(guī)則及各種通用配置。

console-appender.xml:定義了一個ConsoleAppender,用于將日志輸出到控制臺。

file-appender.xml:定義一個RollingFileAppender,用于將日志輸出到文件。

SpringBoot通過base.xml配置文件,加載上述的配置文件來實(shí)現(xiàn)日志。273.2.5基于XML配置日志2.控制臺輸出日志

在chapter03項(xiàng)目的src/main/resources目錄下創(chuàng)建一個logback-spring.xml文件,注釋掉perties文件中的屬性值,logback-spring.xml配置文件的設(shè)置如下內(nèi)容。

運(yùn)行測試方法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>

<!--日志輸出級別,等同于在配置文件中設(shè)置logging.pattern.level-->

<rootlevel="info">

<appender-refref="STDOUT"/>

</root>

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

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

控制臺輸出日志文件的形式一般是在開發(fā)環(huán)境下使用,一般生產(chǎn)環(huán)境下需要將日志輸出到日志文件進(jìn)行日志分析,并將日志根據(jù)級別輸出到不同日志文件中,如果日志文件太大,可以設(shè)置日志文件根據(jù)大小分隔,配置如下所示。

運(yùn)行測試方法contextLoads(),在項(xiàng)目所在磁盤的根路徑下,可以看到生成一個log文件夾,該文件中有按照日期生成的日志文件。293.2.6使用Log4j2日志實(shí)現(xiàn)

如果讓SpringBoot底層使用Log4j2,在pom.xml文件中去除Logback依賴庫,并添加Log4j2依賴庫,依賴修改如下:

這里并沒有單獨(dú)去除Logback依賴庫,SpringBoot為Log4j2也提供了對應(yīng)的Starter,所以可以直接去除SpringBoot默認(rèn)的日志Strater。添加spring-boot-starter-log4j2.jar依賴,它會傳遞性添加它所依賴的Log4j2依賴庫和SLF4J依賴庫,從IntelliJIDEA的Maven面板上可以看到依賴的JAR包,如圖3-11所示。

通過上面的配置,將項(xiàng)目的底層日志框架改成了Log4j2,得益于SpringBoot日志的抽象機(jī)制。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論