<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>

          Spring Boot 使用slf4j進(jìn)行日志記錄

          共 4336字,需瀏覽 9分鐘

           ·

          2021-02-05 09:51

          本來已收錄到我寫的10萬字Springboot經(jīng)典學(xué)習(xí)筆記中,筆記在持續(xù)更新……文末有領(lǐng)取方式

          在開發(fā)中,我們經(jīng)常使用 System.out.println() 來打印一些信息,但是這樣不好,因?yàn)榇罅康氖褂?System.out 會增加資源的消耗。我們實(shí)際項(xiàng)目中使用的是 slf4j 的 logback 來輸出日志,效率挺高的,Spring Boot 提供了一套日志系統(tǒng),logback 是最優(yōu)的選擇。

          1. slf4j 介紹

          引用百度百科里的一段話:

          SLF4J,即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務(wù)于各種各樣的日志系統(tǒng)。按照官方的說法,SLF4J是一個用于日志系統(tǒng)的簡單Facade,允許最終用戶在部署其應(yīng)用時使用其所希望的日志系統(tǒng)。

          這段的大概意思是:你只需要按統(tǒng)一的方式寫記錄日志的代碼,而無需關(guān)心日志是通過哪個日志系統(tǒng),以什么風(fēng)格輸出的。因?yàn)樗鼈內(nèi)Q于部署項(xiàng)目時綁定的日志系統(tǒng)。例如,在項(xiàng)目中使用了 slf4j 記錄日志,并且綁定了 log4j(即導(dǎo)入相應(yīng)的依賴),則日志會以 log4j 的風(fēng)格輸出;后期需要改為以 logback 的風(fēng)格輸出日志,只需要將 log4j 替換成 logback 即可,不用修改項(xiàng)目中的代碼。這對于第三方組件的引入的不同日志系統(tǒng)來說幾乎零學(xué)習(xí)成本,況且它的優(yōu)點(diǎn)不僅僅這一個而已,還有簡潔的占位符的使用和日志級別的判斷。

          正因?yàn)?sfl4j 有如此多的優(yōu)點(diǎn),阿里巴巴已經(jīng)將 slf4j 作為他們的日志框架了。在《阿里巴巴Java開發(fā)手冊(正式版)》中,日志規(guī)約一項(xiàng)第一條就強(qiáng)制要求使用 slf4j:

          1.【強(qiáng)制】應(yīng)用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的API,而應(yīng)依賴使用日志框架SLF4J中的API,使用門面模式的日志框架,有利于維護(hù)和各個類的日志處理方式統(tǒng)一。

          “強(qiáng)制”兩個字體現(xiàn)出了 slf4j 的優(yōu)勢,所以建議在實(shí)際項(xiàng)目中,使用 slf4j 作為自己的日志框架。使用 slf4j 記錄日志非常簡單,直接使用 ?LoggerFactory 創(chuàng)建即可。

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

          public?class?Test?{
          ????private?static?final?Logger?logger?=?LoggerFactory.getLogger(Test.class);
          ????//?……
          }

          2. application.yml 中對日志的配置

          Spring Boot 對 slf4j 支持的很好,內(nèi)部已經(jīng)集成了 slf4j,一般我們在使用的時候,會對slf4j 做一下配置。application.yml 文件是 Spring Boot 中唯一一個需要配置的文件,一開始創(chuàng)建工程的時候是 application.properties 文件,個人比較細(xì)化用 yml 文件,因?yàn)?yml 文件的層次感特別好,看起來更直觀,但是 yml 文件對格式要求比較高,比如英文冒號后面必須要有個空格,否則項(xiàng)目估計(jì)無法啟動,而且也不報錯。用 properties 還是 yml 視個人習(xí)慣而定,都可以。本課程使用 yml。

          我們看一下 application.yml 文件中對日志的配置:

          logging:
          ??config:?logback.xml
          ??level:
          ????com.itcodai.course03.dao:?trace

          logging.config 是用來指定項(xiàng)目啟動的時候,讀取哪個配置文件,這里指定的是日志配置文件是根路徑下的 logback.xml 文件,關(guān)于日志的相關(guān)配置信息,都放在 logback.xml 文件中了。logging.level 是用來指定具體的 mapper 中日志的輸出級別,上面的配置表示 com.itcodai.course03.dao 包下的所有 mapper 日志輸出級別為 trace,會將操作數(shù)據(jù)庫的 sql 打印出來,開發(fā)時設(shè)置成 trace 方便定位問題,在生產(chǎn)環(huán)境上,將這個日志級別再設(shè)置成 error 級別即可(本節(jié)課不討論 mapper 層,在后面 Spring Boot 集成 MyBatis 時再詳細(xì)討論)。

          常用的日志級別按照從高到低依次為:ERROR、WARN、INFO、DEBUG。

          3. logback.xml 配置文件解析

          在上面 application.yml 文件中,我們指定了日志配置文件 logback.xmllogback.xml 文件中主要用來做日志的相關(guān)配置。在 logback.xml 中,我們可以定義日志輸出的格式、路徑、控制臺輸出格式、文件大小、保存時長等等。下面來分析一下:

          3.1 定義日志輸出格式和存儲路徑

          <configuration>
          ?<property?name="LOG_PATTERN"?value="%date{HH:mm:ss.SSS}?[%thread]?%-5level?%logger{36}?-?%msg%n"?/>
          ?<property?name="FILE_PATH"?value="D:/logs/course03/demo.%d{yyyy-MM-dd}.%i.log"?/>
          configuration>

          我們來看一下這個定義的含義:首先定義一個格式,命名為 “LOG_PATTERN”,該格式中 %date 表示日期,%thread 表示線程名,%-5level 表示級別從左顯示5個字符寬度,%logger{36} ?表示 logger 名字最長36個字符,%msg 表示日志消息,%n 是換行符。

          然后再定義一下名為 “FILE_PATH” 文件路徑,日志都會存儲在該路徑下。%i 表示第 i 個文件,當(dāng)日志文件達(dá)到指定大小時,會將日志生成到新的文件里,這里的 i 就是文件索引,日志文件允許的大小可以設(shè)置,下面會講解。這里需要注意的是,不管是 windows 系統(tǒng)還是 Linux 系統(tǒng),日志存儲的路徑必須要是絕對路徑。

          3.2 定義控制臺輸出

          <configuration>
          ?<appender?name="CONSOLE"?class="ch.qos.logback.core.ConsoleAppender">
          ??<encoder>
          ????????????
          ???<pattern>${LOG_PATTERN}pattern>
          ??encoder>
          ?appender>
          configuration>

          使用 節(jié)點(diǎn)設(shè)置個控制臺輸出(class="ch.qos.logback.core.ConsoleAppender")的配置,定義為 “CONSOLE”。使用上面定義好的輸出格式(LOG_PATTERN)來輸出,使用 ${} 引用進(jìn)來即可。

          3.3 定義日志文件的相關(guān)參數(shù)

          <configuration>
          ?<appender?name="FILE"?class="ch.qos.logback.core.rolling.RollingFileAppender">
          ??<rollingPolicy?class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          ???
          ???<fileNamePattern>${FILE_PATH}fileNamePattern>
          ???
          ???<maxHistory>15maxHistory>
          ???<timeBasedFileNamingAndTriggeringPolicy?class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
          ????
          ????<maxFileSize>10MBmaxFileSize>
          ???timeBasedFileNamingAndTriggeringPolicy>
          ??rollingPolicy>

          ??<encoder>
          ???
          ???<pattern>${LOG_PATTERN}pattern>
          ??encoder>
          ?appender>
          configuration>

          使用 定義一個名為 “FILE” 的文件配置,主要是配置日志文件保存的時間、單個日志文件存儲的大小、以及文件保存的路徑和日志的輸出格式。

          3.4 定義日志輸出級別

          <configuration>
          ?<logger?name="com.itcodai.course03"?level="INFO"?/>
          ?<root?level="INFO">
          ??<appender-ref?ref="CONSOLE"?/>
          ??<appender-ref?ref="FILE"?/>
          ?root>
          configuration>

          有了上面那些定義后,最后我們使用 來定義一下項(xiàng)目中默認(rèn)的日志輸出級別,這里定義級別為 INFO,然后針對 INFO 級別的日志,使用 引用上面定義好的控制臺日志輸出和日志文件的參數(shù)。這樣 logback.xml 文件中的配置就設(shè)置完了。

          4. 使用Logger在項(xiàng)目中打印日志

          在代碼中,我們一般使用 Logger 對象來打印出一些 log 信息,可以指定打印出的日志級別,也支持占位符,很方便。

          import?org.slf4j.Logger;
          import?org.slf4j.LoggerFactory;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RestController;

          @RestController
          @RequestMapping("/test")
          public?class?TestController?{

          ????private?final?static?Logger?logger?=?LoggerFactory.getLogger(TestController.class);

          ????@RequestMapping("/log")
          ????public?String?testLog()?{
          ????????logger.debug("=====測試日志debug級別打印====");
          ????????logger.info("======測試日志info級別打印=====");
          ????????logger.error("=====測試日志error級別打印====");
          ????????logger.warn("======測試日志warn級別打印=====");

          ????????//?可以使用占位符打印出一些參數(shù)信息
          ????????String?str1?=?"武哥聊編程";
          ????????String?str2?=?"blog.csdn.net/eson_15";
          ????????logger.info("======武哥的公眾號:{};武哥的CSDN博客:{}",?str1,?str2);

          ????????return?"success";
          ????}
          }

          啟動該項(xiàng)目,在瀏覽器中輸入 localhost:8080/test/log 后可以看到控制臺的日志記錄:

          1. ======測試日志info級別打印=====
          2. =====測試日志error級別打印====
          3. ======測試日志warn級別打印=====
          4. ======武哥的公眾號:武哥聊編程;武哥的CSDN博客:blog.csdn.net/eson_15

          因?yàn)?INFO 級別比 DEBUG 級別高,所以 debug 這條沒有打印出來,如果將 logback.xml 中的日志級別設(shè)置成 DEBUG,那么四條語句都會打印出來,這個大家自己去測試了。同時可以打開 D:\logs\course03\ 目錄,里面有剛剛項(xiàng)目啟動,以后后面生成的所有日志記錄。在項(xiàng)目部署后,我們大部分都是通過查看日志文件來定位問題。

          5. 總結(jié)

          本節(jié)課主要對 slf4j 做了一個簡單的介紹,并且對 Spring Boot 中如何使用 slf4j 輸出日志做了詳細(xì)的說明,著重分析了 logback.xml 文件中對日志相關(guān)信息的配置,包括日志的不同級別。最后針對這些配置,在代碼中使用 Logger 打印出一些進(jìn)行測試。在實(shí)際項(xiàng)目中,這些日志都是排查問題的過程中非常重要的資料。


          該文已收錄到我寫的《10萬字Springboot經(jīng)典學(xué)習(xí)筆記》中,歡迎掃描下方二維碼領(lǐng)取全套筆記



          關(guān)注武哥聊編程

          回復(fù):筆記



          點(diǎn)贊是最大的支持?

          瀏覽 27
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(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>
                  在线一级片 | 逼特逼在线观看视频 | 一级a一级a爰片免费免免水l软件 | 无码国产精品一区二区高潮 | 五月天性爱片 |