最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Springboot之Logback的使用學(xué)習(xí)

 更新時間:2021年05月20日 15:56:22   作者:fxkcsdn  
Logback是SpringBoot內(nèi)置的日志處理框架,你會發(fā)現(xiàn)spring-boot-starter其中包含了spring-boot-starter-logging,該依賴內(nèi)容就是Spring Boot默認的日志框架logback,本文詳細介紹了該框架 ,需要的朋友可以參考下

一、導(dǎo)入依賴

普通項目

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.11</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.11</version>
</dependency>

springboot項目

<!--該依賴已經(jīng)集成了logback-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、配置文件解析

Logback默認會到類路徑下找logback-test.xml and logback.xml

Spring Boot 會在 classpath 下查找是否有 logback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的話,才會加載項目路徑下的 logback-spring.xml

三、配置文件結(jié)構(gòu)

在這里插入圖片描述

四、各個組件的作用

logger: 日志記錄器,root是特殊的logger-頂層logger,因為logger具有繼承關(guān)系,稍后介紹

appender: 配置日志文件輸出目的地

encoder: 控制日志輸出格式,它是借助于layout實現(xiàn)的

rollingPolicy: RollingFileAppender具有該子元素,指定發(fā)生滾動時的行為

triggeringPolicy: RollingFileAppender具有該子元素,指定何時發(fā)生滾動過程,一般不用配置該元素,因為最受歡迎的TimeBasedRollingPolicy ,它實現(xiàn)了rolling policy同時也實現(xiàn)了triggering policy。

filter: 對appender收到的日志進行過濾,只有滿足Filter條件的日志才輸出到日志文件

五、Logger組件

logger組件具有父子層級關(guān)系,root是最頂層的logger。logger記錄器是命名實體。它們的名稱區(qū)分大小寫,并且遵循分層命名規(guī)則.

如果一個記錄器的名稱后跟一個點,則該記錄器是另一個記錄器的祖先,該后跟點的名稱是其后代記錄器名稱的前綴。如果記錄器與子記錄器之間沒有祖先,則稱該記錄器為子記錄器的父項。
例如,名為"com.foo"的記錄器是名為"com.foo.Bar"的記錄器的父項。同樣, "java"是"java.util"和"java.util.Vector"的祖先記錄器。大多數(shù)開發(fā)人員都應(yīng)該熟悉這種命名方案。

logger日志級別繼承

如果未為給定的記錄器分配一個級別,則它將從其最接近的祖先那里繼承一個已分配的級別。例如:
給定記錄器L的有效級別等于其層次結(jié)構(gòu)中的第一個非空級別,從L本身開始, 然后在層次結(jié)構(gòu)中向上尋找直到root logger。為了確保所有記錄器最終都可以繼承級別,root logger始終具有分配的級別,root logger默認級別是DEBUG。

注意:如果日志記錄請求的級別高于或等于記錄器的有效級別,則該日志請求是有效的。日志級別按以下順序排序: TRACE < DEBUG < INFO < WARN < ERROR。

logger關(guān)聯(lián)的appender繼承

一個logger可以配置多個appender,logger輸出的日志會輸出到當(dāng)前記錄器綁定的appender和父級們logger(直到root logger)綁定的appender,可以設(shè)置additivity 屬性為false,則logger輸出的日志僅會輸出到當(dāng)前記錄器綁定的appender

六、logger屬性

  • name:指定全限定包名
  • level:日志輸出級別,如果沒有配置,則參考上面的級別繼承
  • additivity:默認為true,參考上面的appender繼承。

如果additivity為true,會存在重復(fù)輸出日志情況,如下所示

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <logger name="chapters.configuration">
    <appender-ref ref="STDOUT" />
  </logger>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

那么chapters.configuration包下的日志會輸出兩遍到console控制臺,如下所示

14:25:36.343 [main] INFO  chapters.configuration.MyApp3 - Entering application.
14:25:36.343 [main] INFO  chapters.configuration.MyApp3 - Entering application.
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] INFO  chapters.configuration.MyApp3 - Exiting application.
14:25:36.359 [main] INFO  chapters.configuration.MyApp3 - Exiting application.

七、Appender組件

配置日志輸出的目的地,常用的有ConsoleAppender、FileAppender 、RollingFileAppender

ConsoleAppender

 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!--默認System.out,也可以指定System.error -->
    <target>System.out</target>
    <!-- encoders 默認類型ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

寫日志到標(biāo)準(zhǔn)輸出流,可以配置target屬性為system.out,也可以指定System.error,默認System.out

FileAppender

包含的子元素有

  • append:如果為true,則追加到已存在的日志文件,否則截斷現(xiàn)有文件,默認為true
  • file: 指定日志寫入文件的名字。如果文件不存在,則創(chuàng)建包括父級目錄。windows系統(tǒng)要避開“\”,正確例子可以指定為c:/temp/test.log或c:\\temp\\test.log
  • encoder: 輸出的格式 RollingFileAppender

RollingFileAppender

擴展了FileAppender,具有滾動更新日志文件的功能;例如,RollingFileAppender可以登錄到一個名為log.txt的文件,一旦滿足某個條件,就可以保存當(dāng)前日志文件,并滾動輸出到新的日志文件。

包含的子元素有

  • append:如果為true,則追加到已存在的日志文件,否則截斷現(xiàn)有文件,默認為true
  • file: 指定日志寫入文件的名字。如果文件不存在,則創(chuàng)建包括父級目錄。windows系統(tǒng)要避開“\”,正確例子可以指定為c:/temp/test.log或c:\\temp\\test.log
  • encoder:輸出的格式
  • rollingPolicy: 指定RollingFileAppender發(fā)生滾動時的行為
  • triggeringPolicy:指定RollingFileAppender何時發(fā)生滾動過程

 rollingPolicy

rollingPolicy常用的有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy

TimeBasedRollingPolicy

TimeBasedRollingPolicy是最受歡迎的滾動策略。它基于時間進行滾動,可以是按月或按天等。TimeBasedRollingPolicy承擔(dān)滾動以及觸發(fā)所述滾動的責(zé)任。它實現(xiàn)了rolling policy同時也實現(xiàn)了triggering policy。
包含的子元素有

  • fileNamePattern:必選;它的值應(yīng)包括文件名以及適當(dāng)放置的%d轉(zhuǎn)換說明符。所述 %d由指定的轉(zhuǎn)換說明可包含日期和時間模式 java.text.SimpleDateFormat類。如果省略了日期和時間模式,則采用默認模式 yyyy-MM-dd;可以指定多個%d,但是只有一個主要的,其他的都要使用‘a(chǎn)ux'標(biāo)記,多個%d允許你組織對日志文件歸類,例如按照年月分文件夾/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log
  • maxHistory:設(shè)置存檔文件保存時間,日志文件至少保存 15 天,因為有些異常具備以“周”為頻次發(fā)生的特點。
  • totalSizeCap:控制歸檔文件的大小

SizeAndTimeBasedRollingPolicy

支持按照時間拆分后,再按文件大小拆分

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 			20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>20GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

"%i"表示當(dāng)日志文件達到“maxFileSize”它將按照遞增序列(以0開始)歸檔日志。

triggering policy

SizeBasedTriggeringPolicy

該triggering policy通過配置一個maxFileSize參數(shù),當(dāng)日志文件超過該閾值,會通知RollingFileAppender 觸發(fā)日志翻滾。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已經(jīng)完美集成了。

補充:以上Appender都是本地記錄日志,logback也支持網(wǎng)絡(luò)輸出日志、本地數(shù)據(jù)、郵件等;后續(xù)如果有需要再來研究。logback還可以使用AsyncAppender異步記錄日志。

Encoder

encoder負責(zé)轉(zhuǎn)換事件為字節(jié)數(shù)組并將字節(jié)數(shù)組寫入輸出流中。PatternLayoutEncoder 是最常用的encoder,該類通過使用PatternLayout來格式化日志事件。我們可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默認使用PatternLayout進行格式輸出。

layout

負責(zé)轉(zhuǎn)換事件成字符串,我們可以自定義layout,然后通過encoder引用

 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="chapters.layouts.MySampleLayout" />
    </encoder>

PatternLayout

它將日志事件轉(zhuǎn)換成字符串,但是可以自定義字符串通過調(diào)整PatternLayout的轉(zhuǎn)換模式。

PatternLayout的轉(zhuǎn)換模式跟C語言的printf()函數(shù)緊密相關(guān)。
常用的模式有:

% d{pattern}: 日期

% level 日志級別

%thread 線程名稱

%class 全限定類名,日志請求記錄所在的類

%method 日志請求記錄所在的方法

%line 日志請求記錄的行號

%n 換行

%logger{length} 輸出日志logger記錄器的名字,length指定輸出名字長度,logback會智能縮寫而不丟失語義。

%msg 輸出日志記錄器記錄的消息

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS,CTT} %-5level [%thread] [%class:%line] %logger{50} - %msg%n</pattern>
</encoder>

多個模式之間分隔符,在大多數(shù)情況下,文字需包含空格或其他分隔字符('[',']','-'),這樣就不會與轉(zhuǎn)換詞混淆

Filter

對appender收到的日志調(diào)用decide方法進行過濾,只有滿足Filter條件的日志才輸出到日志文件,decide方法有三個返回值,DENY、ACCEPT、NEUTRAL

  • 如果返回的值為DENY,則立即刪除日志事件,而不咨詢其余的篩選器;
  • 如果返回的值是NEUTRAL中性的,則查詢列表中的下一個篩選器,如果沒有其他篩選器可供查詢,則日志事件將正常處理;
  • 如果返回值為ACCEPT,則會立即處理日志事件,跳過其余篩選器的調(diào)用。

 LevelFilter

該過濾器對日志的級別過濾,如果事件日志級別等于配置的級別,過濾器接受或者拒絕該事件日志,依賴于onMatch 和 onMismatch屬性

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
      <pattern>
        %-4relative [%thread] %-5level %logger{30} - %msg%n
      </pattern>
    </encoder>
</appender>

ThresholdFilter

過濾低于指定閾值的事件。對于等于或高于閾值的事件,將在調(diào)用其()方法時響應(yīng)NEUTRAL 。但是,級別低于閾值的事件將被拒絕。

 <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>

EvaluatorFilter

EvaluatorFilter 是封裝了的通用過濾器 EventEvaluator。顧名思義, 評估對象是否滿足給定事件的給定條件。在匹配和不匹配時,托管將分別返回由onMatch 或onMismatch屬性指定的值。
GEventEvaluator 實現(xiàn)了EventEvaluator,通過子元素采用任意Groovy語言布爾表達式作為評估標(biāo)準(zhǔn)的具體實現(xiàn)
JaninoEventEvaluator實現(xiàn)了EventEvaluator,通過子元素采用任意Java語言塊返回布爾值作為評估標(biāo)準(zhǔn)。

uatorFilter

EvaluatorFilter 是封裝了的通用過濾器 EventEvaluator。顧名思義, 評估對象是否滿足給定事件的給定條件。在匹配和不匹配時,托管將分別返回由onMatch 或onMismatch屬性指定的值。
GEventEvaluator 實現(xiàn)了EventEvaluator,通過子元素采用任意Groovy語言布爾表達式作為評估標(biāo)準(zhǔn)的具體實現(xiàn)
JaninoEventEvaluator實現(xiàn)了EventEvaluator,通過子元素采用任意Java語言塊返回布爾值作為評估標(biāo)準(zhǔn)。

EvaluatorFilter 也可通過子元素支持正則匹配。

到此這篇關(guān)于詳解Springboot之Logback的使用學(xué)習(xí)的文章就介紹到這了,更多相關(guān)Logback詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java項目如何引入其他jar包

    java項目如何引入其他jar包

    通常在lib文件夾中存放從外部引入的jar包,所以把JAR文件復(fù)制進去。 然后修改編譯腳本,不需要去編譯tool文件夾里面的java類,直接把jar包添加到classpath,下文將詳細介紹
    2021-10-10
  • spring cloud gateway使用 uri: lb://方式配置時,服務(wù)名的特殊要求

    spring cloud gateway使用 uri: lb://方式配置時,服務(wù)名的特殊要求

    這篇文章主要介紹了spring cloud gateway使用 uri: lb://方式配置時,服務(wù)名的特殊要求,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 解讀JVM的組成部分有什么

    解讀JVM的組成部分有什么

    JVM主要由類加載器子系統(tǒng)、運行時數(shù)據(jù)區(qū)、執(zhí)行引擎和本地庫接口等組成,類加載器負責(zé)加載類文件,運行時數(shù)據(jù)區(qū)管理內(nèi)存,執(zhí)行引擎執(zhí)行字節(jié)碼指令和垃圾回收,本地庫接口連接其他語言
    2025-03-03
  • Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼

    Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼

    最近工作中遇到一個需求,是需要導(dǎo)出數(shù)據(jù)到Excel表格里,所以寫個Demo測試一下,還是比較簡單的,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • Java中的cglib代理詳解

    Java中的cglib代理詳解

    這篇文章主要介紹了Java中的cglib代理詳解, 代理模式是一種設(shè)計模式,它可以為其他對象提供一種代理,以控制對該對象的訪問,可以在運行時動態(tài)地創(chuàng)建代理對象,而不需要手動編寫代理類的代碼,需要的朋友可以參考下
    2023-09-09
  • Spring中的NamespaceHandler加載過程源碼詳解

    Spring中的NamespaceHandler加載過程源碼詳解

    這篇文章主要介紹了Spring中的NamespaceHandler加載過程源碼詳解,Spring提供的NamespaceHandler的處理機制,簡單來說就是命名空間處理器,Spring為了開放性提供了NamespaceHandler機制,這樣我們就可以根據(jù)需求自己來處理我們設(shè)置的標(biāo)簽元素,需要的朋友可以參考下
    2024-02-02
  • 淺談Java中hashCode的正確求值方法

    淺談Java中hashCode的正確求值方法

    這篇文章主要介紹了淺談Java中hashCode的正確求值方法,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java中staticclass靜態(tài)類詳解

    java中staticclass靜態(tài)類詳解

    這篇文章主要介紹了java中staticclass靜態(tài)類詳解,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • Springboot配置文件內(nèi)容加密代碼實例

    Springboot配置文件內(nèi)容加密代碼實例

    這篇文章主要介紹了Springboot配置文件內(nèi)容加密代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法

    Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法

    今天小編就為大家分享一篇Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

嘉兴市| 常宁市| 岳西县| 松江区| 景谷| 北流市| 贡山| 南江县| 耒阳市| 江西省| 龙山县| 甘南县| 方正县| 宝清县| 云阳县| 油尖旺区| 江永县| 阿鲁科尔沁旗| 来宾市| 鲜城| 美姑县| 洪泽县| 四子王旗| 临洮县| 互助| 循化| 蒲城县| 旅游| 靖远县| 巴东县| 尤溪县| 丹江口市| 咸宁市| 中牟县| 衡山县| 喀喇沁旗| 阿鲁科尔沁旗| 永仁县| 漠河县| 彩票| 岳普湖县|