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

Spring Boot異步輸出Logback日志方法詳解

 更新時間:2019年08月25日 09:27:20   作者:風塵博客  
這篇文章主要給大家介紹了關于Spring Boot異步輸出Logback日志的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

一、介紹

1.1 Logback

Logback是由log4j創(chuàng)始人設計的另一個開源日志組件,它分為下面下個模塊:

  • logback-core:其它兩個模塊的基礎模塊
  • logback-classic:它是log4j的一個改良版本,同時它完整實現(xiàn)了slf4j API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging
  • logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能

1.2 日志級別

包括:TRACE、DEBUG、INFO、WARN 和 ERROR。

1.2.1 TRACE

特別詳細的系統(tǒng)運行完成信息,業(yè)務代碼中,不要使用。(除非有特殊用意,否則請使用DEBUG級別替代)

1.2.2 DEBUG

  • 可以填寫所有的想知道的相關信息(但不代表可以隨便寫,debug信息要有意義,最好有相關參數);
  • 生產環(huán)境需要關閉DEBUG信息
  • 如果在生產情況下需要開啟DEBUG,需要使用開關進行管理,不能一直開啟。

1.2.3 INFO

系統(tǒng)運行信息

  • Service方法中對于系統(tǒng)/業(yè)務狀態(tài)的變更;
  • 主要邏輯中的分步驟。

外部接口部分

  • 客戶端請求參數(REST/WS);
  • 調用第三方時的調用參數和調用結果。

說明

  1. 并不是所有的service都進行出入口打點記錄,單一、簡單service是沒有意義的;
  2. 對于復雜的業(yè)務邏輯,需要進行日志打點,以及埋點記錄,比如電商系統(tǒng)中的下訂單邏輯,以及OrderAction操作(業(yè)務狀態(tài)變更);
  3. 對于整個系統(tǒng)的提供出的接口(REST/WS),使用INFO記錄入參;
  4. 如果所有的service為SOA架構,那么可以看成是一個外部接口提供方,那么必須記錄入參;
  5. 調用其他第三方服務時,所有的出參和入參是必須要記錄的(因為你很難追溯第三方模塊發(fā)生的問題)。

1.2.4 WARN

  • 不應該出現(xiàn)但是不影響程序、當前請求正常運行的異常情況:
    • 有容錯機制的時候出現(xiàn)的錯誤情況;
    • 找不到配置文件,但是系統(tǒng)能自動創(chuàng)建配置文件;
  • 即將接近臨界值的時候,例如:緩存池占用達到警告線;
  • 業(yè)務異常的記錄,比如:當接口拋出業(yè)務異常時,應該記錄此異常。

1.2.5 ERROR
影響到程序正常運行、當前請求正常運行的異常情況:

  • 打開配置文件失??;
  • 所有第三方對接的異常(包括第三方返回錯誤碼);
  • 所有影響功能使用的異常,包括:SQLException和除了業(yè)務異常之外的所有異常(RuntimeException和Exception)。

不應該出現(xiàn)的情況:
如果進行了拋出異常操作,請不要記錄ERROR日志,由最終處理方進行處理:

反例(不要這么做):

try{
 ....
}catch(Exception ex){
 String errorMessage=String.format("Error while reading information of user [%s]",userName);
 logger.error(errorMessage,ex);
 throw new UserServiceException(errorMessage,ex);
}

1.3 SpringBoot 中 logback

  1. SpringBoot工程自帶logback和slf4j的依賴,所以重點放在編寫配置文件上,需要引入什么依賴,日志依賴沖突統(tǒng)統(tǒng)都不需要我們管了;
  2. logback框架會默認加載classpath下命名為logback-spring或logback的配置文件。
  3. 將所有日志都存儲在一個文件中文件大小也隨著應用的運行越來越大并且不好排查問題,正確的做法應該是將ERROR日志和其他日志分開,并且不同級別的日志根據時間段進行記錄存儲。

二、logback 配置

2.1 配置文件logback-spring.xml示例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- 屬性文件:在配置文件中找到對應的配置項 -->
  <springProperty scope="context" name="logPath" source="logging.path"/>

  <!-- 輸出到控制臺 -->
  <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
    </layout>
  </appender>

  <!-- 獲取比info級別高(包括info級別)但除error級別的日志 -->
  <appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 指定過濾策略 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>DENY</onMatch>
      <onMismatch>ACCEPT</onMismatch>
    </filter>
    <encoder>
      <!-- 指定日志輸出格式 -->
      <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
    </encoder>

    <!-- 指定收集策略:滾動策略-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 指定生成日志保存地址 -->
      <fileNamePattern>${logPath}/info.%d.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>

  <appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 指定過濾策略 -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>ERROR</level>
    </filter>
    <encoder>
      <!-- 指定日志輸出格式 -->
      <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern>
    </encoder>
    <!-- 指定收集策略:滾動策略-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!--指定生成日志保存地址 -->
      <fileNamePattern>${logPath}/error.%d.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>

  <!-- 異步輸出 -->
  <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
    <queueSize>256</queueSize>
    <!-- 添加附加的appender,最多只能添加一個 -->
    <appender-ref ref="INFO-LOG"/>
  </appender>

  <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
    <!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
    <discardingThreshold>0</discardingThreshold>
    <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
    <queueSize>256</queueSize>
    <!-- 添加附加的appender,最多只能添加一個 -->
    <appender-ref ref="ERROR-LOG"/>
  </appender>

  <!-- 指定最基礎的日志輸出級別 -->
  <root level="info">
    <appender-ref ref="CONSOLE-LOG" />
    <appender-ref ref="INFO-LOG" />
    <appender-ref ref="ERROR-LOG" />
  </root>

</configuration>

項目配置文件中配置日志輸出地址

logging:
 path: ./logs
  

2.2 標簽說明

  • <root>標簽:指定最基礎的日志輸出級別;
    • <appender-ref>標簽,添加append
  • <appender>標簽:指定日志的收集策略
    • name屬性指定appender命名
    • class屬性指定輸出策略,通常有兩種,控制臺輸出和文件輸出,文件輸出就是將日志進行一個持久化。ConsoleAppender將日志輸出到控制臺。
  • <filter>標簽:指定過濾策略
    • <level>:指定過濾的類型。
  • <encoder>標簽:使用該標簽下的<pattern>標簽指定日志輸出格式。
  • <rollingPolicy>標簽:指定收集策略,比如基于時間進行收集
    • 標簽指定生成日志保存地址,實現(xiàn)了按天分類以及日志的目標了。

三、 源碼

Github 示例源碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • SpringBoot開發(fā)案例 分布式集群共享Session詳解

    SpringBoot開發(fā)案例 分布式集群共享Session詳解

    這篇文章主要介紹了SpringBoot開發(fā)案例 分布式集群共享Session詳解,在分布式系統(tǒng)中,為了提升系統(tǒng)性能,通常會對單體項目進行拆分,分解成多個基于功能的微服務,可能還會對單個微服務進行水平擴展,保證服務高可用,需要的朋友可以參考下
    2019-07-07
  • quartz實現(xiàn)定時功能實例詳解(servlet定時器配置方法)

    quartz實現(xiàn)定時功能實例詳解(servlet定時器配置方法)

    Quartz是一個完全由java編寫的開源作業(yè)調度框架,下面提供一個小例子供大家參考,還有在servlet配置的方法
    2013-12-12
  • SpringBoot參數校驗:@Valid與@Validated使用詳解

    SpringBoot參數校驗:@Valid與@Validated使用詳解

    這篇文章主要介紹了SpringBoot參數校驗:@Valid與@Validated使用詳解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java poi判斷excel是xlsx還是xls類型

    java poi判斷excel是xlsx還是xls類型

    這篇文章主要為大家詳細介紹了如何利用java poi來判斷excel是xlsx還是xls類型,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-10-10
  • 基于Eclipce配置Spring Boot過程圖解

    基于Eclipce配置Spring Boot過程圖解

    這篇文章主要介紹了基于Eclipce配置Spring Boot過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Spring?IOC?xml方式進行工廠Bean操作詳解

    Spring?IOC?xml方式進行工廠Bean操作詳解

    這篇文章主要介紹了Spring?IOC?xml方式進行工廠Bean操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • idea中Tomcat啟動失敗的解決

    idea中Tomcat啟動失敗的解決

    這篇文章主要介紹了idea中Tomcat啟動失敗的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • java 判斷一個數組中的數值是否連續(xù)相鄰的方法

    java 判斷一個數組中的數值是否連續(xù)相鄰的方法

    下面小編就為大家分享一篇java 判斷一個數組中的數值是否連續(xù)相鄰的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解MyBatisPlus如何實現(xiàn)分頁和查詢操作

    詳解MyBatisPlus如何實現(xiàn)分頁和查詢操作

    這篇文章主要為大家詳細介紹了MyBatisPlus是如何實現(xiàn)分頁和查詢操作的,文中的示例代碼講解詳細,對我們學習有一定的幫助,需要的可以參考一下
    2022-05-05
  • 使用SpringSecurity處理CSRF攻擊的方法步驟

    使用SpringSecurity處理CSRF攻擊的方法步驟

    這篇文章主要介紹了使用SpringSecurity處理CSRF攻擊的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論

比如县| 蒙城县| 宁海县| 上栗县| 鄢陵县| 砚山县| 观塘区| 屯昌县| 且末县| 宿州市| 苍山县| 绥芬河市| 芜湖县| 宜城市| 大石桥市| 交口县| 南华县| 遵化市| 精河县| 广灵县| 清远市| 抚顺市| 鲁甸县| 富顺县| 呼和浩特市| 陇南市| 潞城市| 昌黎县| 乾安县| 科尔| 武邑县| 三河市| 武陟县| 托克托县| 朔州市| 凤阳县| 长沙市| 建瓯市| 河间市| 海林市| 临湘市|