<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot日志系統(tǒng)

          共 3438字,需瀏覽 7分鐘

           ·

          2022-01-21 05:27

          日志系統(tǒng)

          我們首先要區(qū)分一下,什么是日志門面(Facade)什么是日志實現(xiàn),我們之前學(xué)習(xí)的JUL實際上就是一種日志實現(xiàn),我們可以直接使用JUL為我們提供的日志框架來規(guī)范化打印日志,而日志門面,如SIf4j,是把不同的日志系統(tǒng)的實現(xiàn)進(jìn)行了具體的抽象化,只提供了統(tǒng)一的日志使用接口使用時只需要按照其提供的接口方法進(jìn)行調(diào)用即可,由于它只是一個接口,并不是一個具體的可以直接單獨使用的日志框架,所以最終日志的格式、記錄級別、輸出方式等都要通過接口綁定的具體的日志系統(tǒng)來實現(xiàn),這些具體的日志系統(tǒng)就有l(wèi)og4j、 logback、java.uti.logging等,它們才實現(xiàn)了具體的日志系統(tǒng)的功能。


          日志門面和日志實現(xiàn)就像JDBC和數(shù)據(jù)庫驅(qū)動一樣,一個是畫大餅的,一個是真的去做餅的。


          日志門面:

          • slf4j

          日志實現(xiàn):

          • Log4j

          • LogBack

          • Logging


          下圖表示slf4j如何實現(xiàn)各種日志框架:


          注意:

          每一個日志實現(xiàn)框架都有自己的配置文件,使用slf4j以后,配置文件還是做成日志實現(xiàn)框架自己本身的配置文件。

          比如實現(xiàn)框架選用logback,那么配置文件就寫logback.xml這種,實現(xiàn)框架選log4j,那么配置就選log4j.xml這種。


          slf4j日志門面

          Simple Logging Facadefor Java

          slf4j是門面的抽象,具體實現(xiàn)可以交給log4j、logback或jdk的logging來實現(xiàn)。


          說白了就是slf4j抽象接口支持各大日志框架的實現(xiàn)的支持。


          結(jié)構(gòu)圖:類似jdbc的廠商

          我們用的是slf4j的門面接口,實現(xiàn)的是支持slf4j的實現(xiàn)框架(廠商)。


          簡單的說,就是接口和接口實現(xiàn)類的關(guān)系!



          Logback日志實現(xiàn)

          要使用slf4j日志就要使用支持slf4j日志的實現(xiàn)。

          logging日志框架是log4j的后繼者,相對使用較多,我們用這個來舉例子。

          使用slf4j日志接口實現(xiàn)的是logging的框架實現(xiàn)類。

          只要有實現(xiàn),slf4j就會自動去發(fā)現(xiàn)實現(xiàn)它。


          然后logging實現(xiàn)就會自動尋找到resource資源路徑下的logback.xml配置文件。


          需要的jar包:

          • slf4j-api

          • logback-core

          • logback-classic


          引入依賴:

          ???
          ????<dependency>
          ??????<groupId>org.slf4jgroupId>
          ??????<artifactId>slf4j-apiartifactId>
          ??????<version>1.7.25version>
          ????dependency>

          ????
          ????<dependency>
          ??????<groupId>ch.qos.logbackgroupId>
          ??????<artifactId>logback-coreartifactId>
          ??????<version>1.2.3version>
          ????dependency>
          ????
          ????<dependency>
          ??????<groupId>ch.qos.logbackgroupId>
          ??????<artifactId>logback-classicartifactId>
          ??????<version>1.2.3version>
          ????dependency>

          如果是SpringBoot,則不用引入依賴,本身自帶了這些依賴。


          logback.xml的配置文件

          提示:

          輸出的格式是可以自由設(shè)置

          指定輸出的日志級別可以設(shè)置多個引用

          輸出日志從高到底輸出

          輸出日志的文件如果沒有會自動創(chuàng)建。


          日志級別:

          從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,?SpringBoot默認(rèn)只會打印 info 以上級別的信息。


          測試:(測試slf4j門面接口實現(xiàn)類是logging實現(xiàn)類框架)

          測試結(jié)果:


          日志的輸出是按照日志的指定級別進(jìn)行輸出的,從小到大的級別輸出。


          slf4j日志的填充功能:



          注意:

          當(dāng)slf4j在使用的時候沒有導(dǎo)入實現(xiàn)的包,會報找不到實現(xiàn)的錯。


          奉上logback.xml的配置文件(方便復(fù)制

          ??<configuration>
          ????
          ????<appender?name="STDOUT"?class="ch.qos.logback.core.ConsoleAppender">
          ????????<encoder>
          ????????????<pattern>%date{yyyy:MM:dd:HH:mm:ss.SSS}?[%thread]?%-5level?%logger{35}?-?%msg?%npattern>
          ????????encoder>

          ????appender>

          ????
          ????<appender?name="FILE"?class="ch.qos.logback.core.FileAppender">
          ????????<file>/Users/hbm/Desktop/Java?API/ok2.txtfile>?
          ????????<encoder>
          ????????????<pattern>%date{yyyy:MM:dd:HH:mm:ss.SSS}?[%thread]?%-5level?%logger{35}?-?%msg?%npattern>
          ????????encoder>
          ????appender>

          ????
          ????<root?level="trace">?
          ????????<appender-ref?ref="STDOUT"/>
          ????????<appender-ref?ref="FILE"/>
          ????root>
          configuration>

          或者:


          <configuration>
          ????
          ????<include?resource="org/springframework/boot/logging/logback/defaults.xml"/>

          ????
          ????<appender?name="CONSOLE"?class="ch.qos.logback.core.ConsoleAppender">
          ????????
          ????????<encoder>
          ????????????<pattern>${CONSOLE_LOG_PATTERN}pattern>
          ????????????<charset>UTF-8charset>
          ????????encoder>
          ????appender>

          ????
          ????<appender?name="FILE"?class="ch.qos.logback.core.FileAppender">
          ????????
          ????????<file>log/日志文件.logfile>
          ????????
          ????????<append>trueappend>
          ????????
          ????????<encoder>
          ????????????<pattern>%date{yyyy:MM:dd:HH:mm:ss.SSS}?[%thread]?%-5level?%logger{35}?-?%msg?%npattern>
          ????????????<charset>UTF-8charset>
          ????????encoder>
          ????appender>

          ????

          ????
          ????<root?level="info">
          ????????
          ????????<appender-ref?ref="CONSOLE"/>
          ????????<appender-ref?ref="FILE"/>
          ????root>
          configuration>

          輸出日志級別level可以自己選擇。


          提示:

          官方推薦logback的配置文件名為 logback-spring.xml 或 logback.xml 。

          如果不進(jìn)行l(wèi)ogback-spring.xml的配置,則會自動使用springboot默認(rèn)提供的defaults.xml預(yù)設(shè)配置,即啟動時打印的信息樣式配置。如果配置了logback-spring.xml,則會覆蓋默認(rèn)預(yù)設(shè)配置。


          通過上面的學(xué)習(xí),可以使用到控制臺輸出日志信息,一般建議以文件輸出日志信息,方便排查bug。






          SpringBoot使用日志

          SpringBoot為了統(tǒng)一日志框架的使用,,做了這些事情:

          • 直接將其他依賴以前的日志框架剔除

          • 導(dǎo)入對應(yīng)日志框架的SIi4j中間包

          • 導(dǎo)入自己官方指定的日志實現(xiàn),并作為SIf4j的日志實現(xiàn)層


          在SpringBoot中默認(rèn)使用的日志門面是Slf4j日志,默認(rèn)日志實現(xiàn)為LogBack。


          SpringBoot中自帶了slf4j和logback的依賴,如需更換其他實現(xiàn),加入依賴即可。


          使用默認(rèn)的slf4j+logback日志:

          測試:

          /**
          ?*?控制層
          ?*?@Author?黃柏茗
          ?*?@Date?2022-01-15
          ?*/

          @Controller
          public?class?MyController?{
          ????//日志
          ????Logger?logger?=?LoggerFactory.getLogger(MyController.class);

          ????@RequestMapping("/test")
          ????public?String?test()?{

          ????????logger.info("打印了個小日志");

          ????????return?"測試日志";
          ????}
          }

          因為我們使用了Logbok,使用一個 @Slf4j 注解也可以搞定!

          /**
          ?*?控制層
          ?*?@Author?黃柏茗
          ?*?@Date?2022-01-15
          ?*/

          @Slf4j?//加入注解
          @Controller
          public?class?MyController?{
          ????
          ????@RequestMapping("/test")
          ????public?String?test()?{

          ????????//可直接使用日志,更方便
          ????????log.info("打印了個小日志");

          ????????return?"測試日志";
          ????}
          }

          兩者都可以,后者更簡潔方便,因為log對象本質(zhì)上在編譯時,lombok插件會自動給它加上Logger對象,使用的還是Logger對象。


          所以,在SpringBoot中使用默認(rèn)的slf4j+logback日志實現(xiàn)就闊以了!

          使用步驟請看上面的logback日志實現(xiàn)。


          本次實驗使用的是SpringBoot+slf4j日志門面+logback日志實現(xiàn)。


          總結(jié):

          slf4j就是個接口,需要使用接口的實現(xiàn)類,實現(xiàn)類可以自由選擇,可以選擇log4j或者logback或jdk自帶的logging實現(xiàn)等.

          推薦使用logback實現(xiàn),因為logback是log4j的后繼者。




          瀏覽 100
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产v片 | 亚洲无码内射在线 | 精品熟人一区二区三区四区 | 久夜福利视频 | 豆花视频入口www |