版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章SpringBoot日志第3章SpringBoot日志3.1
日志框架3.2
日志使用23.1日志框架3.1.1SpringBoot的日志SpringBoot使用CommonsLogging進行所有內(nèi)部日志記錄,但保留底層日志實現(xiàn)。項目中只要導入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。33.1.1SpringBoot的日志市面上常見的日志框架有很多,比如:SLF4J(SimpleLoggingFacadeforJava)、Log4j、Log4j2、Logback、JakartaCommonLogging(JCL)、java.util.logging(JUL)、jboss-logging等。這些日志框架又可分為日志門面和日志實現(xiàn),如表3-1所示。左邊選一個門面(抽象層),右邊來選一個實現(xiàn)。SpringBoot底層是Spring框架,Spring框架默認使用JCL,spring-boot-starter-logging采用了SLF4j+Logback的組合形式,其中SLF4j作為日志門面,Logback作為日志實現(xiàn),開發(fā)者通常不需要直接操作日志實現(xiàn)的API。SpringBoot默認會添加SLF4J依賴(slf4j-api.jar)和Logback依賴(logback-core.jar和slf4j-api.jar)。43.1.1SpringBoot的日志
SpringBoot框架需要整合大量第三方框架,而這些框架的底層可能會使用JCL、Log4j、JUL等日志。從依賴關系中可以看到,log4j-to-slf4j.jar用來將Log4j日志路由到SLF4J,jul-to-slf4j.jar用來將JUL日志路由到SLF4J。SpringBoot日志抽象層的示意如圖3-2所示。
SpringBoot能自動適配日志,底層使用slf4j+logback的方式記錄日志,引入其他框架的時候,只需要將這個框架依賴的日志框架移除掉,這樣即可將底層日志實現(xiàn)改為使用其他框架。53.1.2Logback簡介
Logback日志框架是由log4j創(chuàng)始人開發(fā)的另一套開源日志組件,是SpringBoot默認選擇的日志實現(xiàn),體系非常強大,提供了logback-core、logback-classic和logback-access三個模塊供開發(fā)者使用。logback-core:是Logback的基礎模塊,是其它兩個模塊的基礎模塊。
logback-classic:可看成是Log4j的一個改進版本,此外logback-classic完整實現(xiàn)SLF4JAPI使開發(fā)者可以在其他日志框架(如Log4j)之間自由切換。logback-access:與Servlet容器(如Tomcat)集成,以提供HTTP訪問日志功能。63.2日志使用3.2.1默認日志格式SpringBoot項目啟動后,默認看到如圖3-3所示的界面。從上圖可以看到,Spring的Logo部分是SpringBoot框架自帶的,日志格式大致如下:時間日期、日志級別、進程ID、分隔符、線程名稱、記錄器名稱、日志內(nèi)容。73.2.2日志級別在SpringBoot默認應用日志配置中,只會記錄ERROR、WARN和INFO級別的日志消息,當然也可以指定日志級別進行日志輸出,如果指定了日志級別,那么只會對應輸出高于指定級別的日志信息。SpringBoot中日志級別如下:TRACE<DEBUG<INFO<WARN<ERROR。
下面通過示例來講解SpringBoot日志的用法。(1)使用SpringInitializr方式創(chuàng)建一個名為chapter03的SpringBoot項目。(2)在項目的測試類Chapter03ApplicationTests中添加日志記錄器Logger,并在contextLoads()測試方法中通過Logger調(diào)用相應級別的方法,代碼如下所示:
運行測試方法contextLoads(),控制臺輸出的日志信息,如圖3-4所示。8@SpringBootTestclassChapter03ApplicationTests{
//日志記錄器
Loggerlogger=LoggerFactory.getLogger(getClass());
@Test
voidcontextLoads(){
//日志的級別,由低到高:trace<debug<info<warn<error//可調(diào)整輸出日志級別;日志就只在這個級別以后的高級別生效
logger.trace("……這是trace日志……");
logger.debug("……這是debug日志……");
//SpringBoot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規(guī)定的級別
logger.info("……這是info日志……");
logger.warn("……這是warn日志……");
logger.error("……這是error日志……");}}3.2.2日志級別改變?nèi)罩镜脑O置級別。可以通過debug=true或trace=true等屬性改變整個SpringBoot核心的日志級別;還可通過logging.level.<logger-name>=<level>屬性設置指定日志的日志級別,其中<logger-name>代表日志名,通常就是包名或全限定類名,<level>則可以是trace、debug、info、warn和error等級別。
在perties配置文件中,設置日志級別為trace,設置如下:運行測試方法contextLoads(),控制臺輸出的日志信息,如圖3-5所示。9#設置com.yzpc包下的類以trace級別輸出.yzpc=trace3.2.3日志文件輸出默認情況下,SpringBoot只會將日志消息輸出到控制臺,并不會將日志寫入日志文件。如果要將日志輸出到文件,只需在perties文件或application.yml文件內(nèi)設置如下兩個屬性之一。
:設置日志文件,這里可以設置文件的絕對路徑,也可設置文件的相對路徑,如=my.log。logging.file.path:設置日志目錄,設置好目錄后,會在設置目錄文件夾下創(chuàng)建一個spring.log文件,如logging.file.path=/D:/log。
上述兩個屬性,如只設置一個,SpringBoot應用會默認讀取該配置;如果同時設置,只有會生效。103.2.3日志文件輸出下面通過示例來講解SpringBoot的日志文件輸出。(1)不指定路徑在當前項目根目錄下生成日志文件
在chapter03項目的perties配置文件中,設置日志文件的名稱,配置如下:
運行測試方法contextLoads(),控制臺輸出相應日志信息,查看chapter03項目的根目錄,可以看到my.log的日志文件,打開my.log即可看到日志信息,如圖3-6所示。11#不指定路徑在當前項目下生成my.log日志=my.log3.2.3日志文件輸出
(2)指定日志文件的輸出目錄將perties配置文件的的屬性行注釋掉,添加配置如下:運行測試方法contextLoads(),控制臺輸出相應日志信息,查看chapter03的根目錄,可以看到生成一個SpringLogs的文件夾,里面有日志文件spring.log,如圖3-7所示。12#指定日志文件的輸出目錄,使用spring.log作為默認文件logging.file.path=SpringLogs/3.2.3日志文件輸出
(3)自定義路徑和文件名生成日志文件
在perties配置文件中,屏蔽或刪除logging.file.path屬性行,添加的屬性行,配置如下:
運行測試方法contextLoads(),控制臺輸出相應日志信息,查看d:/log/目錄,可以看到同樣生成了my.log日志文件。13#可以指定完整的路徑和文件名生成日志文件=d:/log/my.log3.2.4自定義日志格式將日志輸出到文件時,可通過logging.pattern.file屬性和logging.pattern.console屬性指定日志文件和控制臺的輸出格式,輸出的日志格式如下。說明如下:
%d:表示日期時間。
%thread:表示線程名。
%-5level:表示級別從左顯示5個字符寬度。
%logger{50}:表示logger名字最長50個字符,否則按照句點分割。
%msg:表示日志消息。
%n:表示換行符。14%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n3.2.4自定義日志格式
在chapter03項目的perties配置文件中,添加如下配置:
運行測試方法contextLoads(),控制臺輸出日志信息以及日志文件中的信息,如圖3-8所示。15#在控制臺輸出的日志的格式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的默認日志實現(xiàn)
在SpringBoot中默認使用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配置文件,加載上述的配置文件來實現(xiàn)日志。163.2.5基于XML配置日志2.控制臺輸出日志
在chapter03項目的src/main/resources目錄下創(chuàng)建一個logback-spring.xml文件,注釋掉perties文件中的屬性值,logback-spring.xml配置文件的設置如下內(nèi)容。
運行測試方法contextLoads(),控制臺輸出日志信息,如圖3-10所示。17<?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.日志文件輸出
控制臺輸出日志文件的形式一般是在開發(fā)環(huán)境下使用,一般生產(chǎn)環(huán)境下需要將日志輸出到日志文件進行日志分析,并將日志根據(jù)級別輸出到不同日志文件中,如果日志文件太大,可以設置日志文件根據(jù)大小分隔,配置如下所示。
運行測試方法contextLoads(),在項目所在磁盤的根路徑下,可以看到生成一個log文件夾,該文件中有按照日期生成的日志文件。183.2.6使用Log4j2日志實現(xiàn)
如果讓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日志的抽象機制。19<dependencies>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市市轄區(qū)(2024年-2025年小學五年級語文)統(tǒng)編版小升初真題((上下)學期)試卷及答案
- 人教版九年級化學上冊復習教案
- DB11T 1132-2014 建設工程施工現(xiàn)場生活區(qū)設置和管理規(guī)范
- 廣東省陽江市高新區(qū)2024-2025學年高一上學期11月期中英語試題(含答案)
- 職業(yè)學院建筑鋼結構工程技術專業(yè)人才培養(yǎng)方案
- 工業(yè)用碾碎機產(chǎn)業(yè)深度調(diào)研及未來發(fā)展現(xiàn)狀趨勢
- 醫(yī)用香膏市場需求與消費特點分析
- 沖壓機產(chǎn)業(yè)深度調(diào)研及未來發(fā)展現(xiàn)狀趨勢
- 低音鼓槌產(chǎn)業(yè)規(guī)劃專項研究報告
- 護發(fā)油產(chǎn)業(yè)規(guī)劃專項研究報告
- 三叉神經(jīng)微血管減壓術的手術配合專家講座
- 中考數(shù)學一輪復習課件全等三角形
- 國測省測四年級勞動質(zhì)量檢測試卷
- 2024-2029年安徽省家具行業(yè)分析及發(fā)展前景預測報告預測
- 國旗國徽國歌知識講座
- 露營基地合同協(xié)議書
- 中建測評2024二測題庫
- 心理危機評估的自我保護與邊界管理
- 生產(chǎn)前的準備工作
- 六年級上冊數(shù)學心得體會
- 機械制圖教案(完整版)
評論
0/150
提交評論