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

spring?boot?Slf4j日志框架的體系結(jié)構(gòu)詳解

 更新時(shí)間:2022年05月25日 09:19:08   作者:字母哥哥  
在項(xiàng)目開發(fā)中記錄日志是必做的一件事情,springboot內(nèi)置了slf4j日志框架,下面這篇文章主要給大家介紹了關(guān)于spring?boot?Slf4j日志框架的體系結(jié)構(gòu),需要的朋友可以參考下

前言

剛剛接觸到j(luò)ava log日志的同學(xué)可能會(huì)被各種日志框架嚇到,包括各種日志框架之間的jar總是發(fā)生沖突,另很多小伙伴頭疼不已。那我們本篇的內(nèi)容就是將各種java 日志框架發(fā)展過(guò)程,以及他們之間的關(guān)系,以及如何選型來(lái)介紹給大家。

一、五花八門的日志工具包

1.1. 日志框架

  • JDK java.util.logging 包:java.util.logging 是 jdk1.4 發(fā)布的 java 日志包, 可以說(shuō)是應(yīng)用比較久遠(yuǎn)的日志工具包
  • log4j: apache 的一個(gè)開源項(xiàng)目,提供了強(qiáng)有力的 java 日志支持,甚至他也提供了其他語(yǔ)言包括 C、C++、.Net、PL/SQL 的接口,從而實(shí)現(xiàn)多語(yǔ)言并存的分布式環(huán)境日志打印。目前已經(jīng)停止更新,所以不推薦使用。
  • Logback:由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開源日志組件,作為Spring Boot默認(rèn)的日志框架,應(yīng)用比較廣泛。
  • log4j2 :Apache Log4j2是對(duì)Log4j的升級(jí),它比其前身Log4j1.x提供了重大改進(jìn),并提供了Logback中可用的許多改進(jìn),同時(shí)修復(fù)了Logback架構(gòu)中的一些問(wèn)題。它基于LMAX公司開發(fā)Disruptor(一個(gè)開源的無(wú)鎖并發(fā)框架),改善了Log4j和Logback在架構(gòu)設(shè)計(jì)方面的缺陷,具有超高的吞吐量和低延遲,性能比Log4j1.x和Logback更好。

1.2.日志門面

  • commons-logging: Apache commons類庫(kù)中的一員,他作為一個(gè)日志門面,能夠自動(dòng)選擇使用 log4j 還是 JDK logging,但是他不依賴Log4j,JDK Logging的API。如果項(xiàng)目的classpath中包含了log4j的類庫(kù),就會(huì)使用log4j,否則就使用JDK Logging。
  • SLF4J: 可以說(shuō)是目前應(yīng)用最為廣泛的日志門面了,它提供了一個(gè)日志抽象層,允許你在后臺(tái)使用任意一個(gè)日志類庫(kù)。如:log4j、log4j2、logback

1.3日志門面存在的意義

為什么不直接使用日志框架,而是搞出一個(gè)日志門面?

日志門面(SLF4J)主要是為了給Java日志訪問(wèn)提供一套標(biāo)準(zhǔn)、規(guī)范的API框架,其主要意義在于提供接口,具體的實(shí)現(xiàn)可以交由其他日志框架來(lái)實(shí)現(xiàn),例如log4j和logback等。 對(duì)于一般的Java項(xiàng)目而言,日志框架會(huì)選擇slf4j-api作為門面,配上具體的實(shí)現(xiàn)框架(log4j、log4j2、logback等),中間使用橋接器完成橋接。

前面介紹的幾種日志框架,每一種日志框架都有自己?jiǎn)为?dú)的API,要使用對(duì)應(yīng)的框架就要使用其對(duì)應(yīng)的API,這就大大的增加應(yīng)用程序代碼對(duì)于日志框架的耦合性要求。有了SLF4J這個(gè)門面之后,程序員永遠(yuǎn)都是面向SLF4J編程,可以實(shí)現(xiàn)簡(jiǎn)單快速地替換底層的日志框架而不會(huì)導(dǎo)致業(yè)務(wù)代碼需要做相應(yīng)的修改。

在使用 SLF4J 進(jìn)行日志記錄時(shí),通常都需要在每個(gè)需要記錄日志的類中定義 Logger 變量,如下所示:

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

@RestController
public class LogTestController {
    private static final Logger logger = LoggerFactory.getLogger(LogTestController.class);

    @GetMapping("/test")
    public void test(){
        logger.trace("Trace 日志...");
        logger.debug("Debug 日志...");
        logger.info("Info 日志...");
        logger.warn("Warn 日志...");
        logger.error("Error 日志...");
    }
}

這顯然屬于重復(fù)性勞動(dòng),降低了開發(fā)效率,如果你在項(xiàng)目中引入了 Lombok,那么可以使用它提供的 @Slf4j 注解來(lái)自動(dòng)生成上面那個(gè)變量,默認(rèn)的變量名是 log,如果我們想采用慣用的 LOGGER作為 變量名,那么可以在工程的根目錄中增加 lombok.config 文件,并在文件中增加lombok.log.fieldName=LOGGER的配置項(xiàng)即可。

二、日志框架選型

  • Spring Boot 默認(rèn)的日志記錄框架使用的是 Logback
  • 其中 Log4j 可以認(rèn)為是一個(gè)過(guò)時(shí)的函數(shù)庫(kù),已經(jīng)停止更新,不推薦使用,相比之下,性能和功能也是最差的。
  • logback 雖然是 Spring Boot 默認(rèn)的,但性能上還是不及 Log4j2,因此,在現(xiàn)階段,日志記錄首選 Log4j2(log4j系列經(jīng)歷了安全風(fēng)波,請(qǐng)選用漏洞修復(fù)后的新版本)。

SLF4J + Log4j2 是我們推薦的日志記錄選型。

性能測(cè)試結(jié)果

參考:log4j2官網(wǎng)

三、日志級(jí)別

細(xì)說(shuō)各日志框架整合配置前,我們先來(lái)大致了解下,最常見的日志的幾個(gè)級(jí)別:ERROR, WARN, INFO, DEBUG和TRACE。像其他的,比如ALL、OFF和FATAL之類的開發(fā)過(guò)程中應(yīng)該基本上是不會(huì)涉及的。所以以下從低到高一次介紹下常見的日志級(jí)別。

  1. TRACE:追蹤。一般上對(duì)核心系統(tǒng)進(jìn)行性能調(diào)試或者跟蹤問(wèn)題時(shí)有用,此級(jí)別很低,一般上是不開啟的,開啟后日志會(huì)很快就打滿磁盤的。
  2. DEBUG:調(diào)試。這個(gè)大家應(yīng)該不陌生了。開發(fā)過(guò)程中主要是打印記錄一些運(yùn)行信息之類的。
  3. INFO:信息。這個(gè)是最常見的了,大部分默認(rèn)就是這個(gè)級(jí)別的日志。一般上記錄了一些交互信息,一些請(qǐng)求參數(shù)等等??煞奖愣ㄎ粏?wèn)題,或者還原現(xiàn)場(chǎng)環(huán)境的時(shí)候使用。此日志相對(duì)來(lái)說(shuō)是比較重要的。
  4. WARN:警告。這個(gè)一般上是記錄潛在的可能會(huì)引發(fā)錯(cuò)誤的信息。比如啟動(dòng)時(shí),某某配置文件不存在或者某個(gè)參數(shù)未設(shè)置之類的。
  5. ERROR:錯(cuò)誤。這個(gè)也是比較常見的,一般上是在捕獲異常時(shí)輸出,雖然發(fā)生了錯(cuò)誤,但不影響系統(tǒng)的正常運(yùn)行。但可能會(huì)導(dǎo)致系統(tǒng)出錯(cuò)或是宕機(jī)等。

日志級(jí)別從小到大為trace<debug<info<warn<error<fatal,由于通常日志框架默認(rèn)日志級(jí)別設(shè)置為INFO,因此1.3.小節(jié)中樣例trace和debug級(jí)別的日志都看不到。

2020-08-17 13:59:16.566  INFO c.z.b.l.controller.LogTestController     : Info 日志...
2020-08-17 13:59:16.566  WARN  c.z.b.l.controller.LogTestController     : Warn 日志...
rn 日志...
2020-08-17 13:59:16.566 ERROR  c.z.b.l.controller.LogTestController     : Error 日志...

四、常見術(shù)語(yǔ)概念解析

  1. appender:主要控制日志輸出到哪里,比如:文件、數(shù)據(jù)庫(kù)、控制臺(tái)打印等
  2. logger: 用來(lái)設(shè)置某一個(gè)包或者具體某一個(gè)類的日志打印級(jí)別、以及指定appender
  3. root:也是一個(gè)logger,是一個(gè)特殊的父logger。所有的子logger最終都會(huì)將輸出流交給root,除非在子logger中配置了additivity=“false”。
  4. rollingPolicy:所有日志都放在一個(gè)文件是不好的,所以可以指定滾動(dòng)策略,按照一定周期或文件大小切割存放日志文件。
  5. RolloverStrategy:日志清理策略。通常是指日志保留的時(shí)間。
  6. 異步日志:?jiǎn)为?dú)開一個(gè)線程做日志的寫操作,達(dá)到不阻塞主線程的目的。

  • 同步日志,主線程要等到日志寫磁盤完成之后,才能繼續(xù)向下執(zhí)行
  • 異步日志,主線程寫日志只是將日志消息放入一個(gè)隊(duì)列,之后就繼續(xù)向下執(zhí)行,這個(gè)過(guò)程是在內(nèi)存層面完成的。之后由專門的線程從隊(duì)列中獲取日志數(shù)據(jù)寫入磁盤,所以不阻塞主線程。主線程(核心業(yè)務(wù)代碼)執(zhí)行效率很高。

總結(jié)

到此這篇關(guān)于spring boot Slf4j日志框架的體系結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)springboot Slf4j日志框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java自定義異常以及throw和throws關(guān)鍵字用法

    java自定義異常以及throw和throws關(guān)鍵字用法

    這篇文章主要介紹了java自定義異常以及throw和throws關(guān)鍵字用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java中synchronized的優(yōu)化措施

    Java中synchronized的優(yōu)化措施

    這篇文章主要介紹了Java中synchronized的優(yōu)化,介紹為了實(shí)現(xiàn)高效并發(fā),虛擬機(jī)對(duì)synchronized 做的一系列的鎖優(yōu)化措施,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static關(guān)鍵字用于表示靜態(tài)變量和靜態(tài)方法,靜態(tài)變量是類的成員變量,它們屬于類本身,而不是類的實(shí)例,這篇文章主要給大家介紹了關(guān)于Java中static靜態(tài)變量、靜態(tài)方法詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • Java中LinkedHashMap的實(shí)現(xiàn)詳解

    Java中LinkedHashMap的實(shí)現(xiàn)詳解

    LinkedHashMap是Java中的一個(gè)Map容器,它繼承自HashMap,并且還可以對(duì)元素進(jìn)行有序存儲(chǔ),本文將介紹LinkedHashMap的實(shí)現(xiàn)原理以及使用方法,并且提供相應(yīng)的測(cè)試用例和全文小結(jié),需要的可以參考下
    2023-09-09
  • 詳解spring+springmvc+mybatis整合注解

    詳解spring+springmvc+mybatis整合注解

    本篇文章主要介紹了詳解spring+springmvc+mybatis整合注解,詳細(xì)的介紹了ssm框架的使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-04-04
  • Java這個(gè)名字的來(lái)歷與優(yōu)勢(shì)

    Java這個(gè)名字的來(lái)歷與優(yōu)勢(shì)

    Java是Sun公司開發(fā)的一種編程語(yǔ)言,Sun公司最初的方向是讓Java來(lái)開發(fā)一些電器裝置程序,Java名字的由來(lái),實(shí)際上是一個(gè)有趣的故事。
    2014-10-10
  • 實(shí)例化JFileChooser對(duì)象報(bào)空指針異常問(wèn)題的解決辦法

    實(shí)例化JFileChooser對(duì)象報(bào)空指針異常問(wèn)題的解決辦法

    今天小編就為大家分享一篇關(guān)于實(shí)例化JFileChooser對(duì)象報(bào)空指針異常問(wèn)題的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Spring集成Quartz的簡(jiǎn)單配置的方法

    Spring集成Quartz的簡(jiǎn)單配置的方法

    本篇文章主要介紹了Spring集成Quartz的簡(jiǎn)單配置的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • SpringCloud超詳細(xì)講解負(fù)載均衡組件Ribbon源碼

    SpringCloud超詳細(xì)講解負(fù)載均衡組件Ribbon源碼

    在微服務(wù)中,對(duì)服務(wù)進(jìn)行拆分之后,必然會(huì)帶來(lái)微服務(wù)之間的通信需求,而每個(gè)微服務(wù)為了保證高可用性,又會(huì)去部署集群,那么面對(duì)一個(gè)集群微服務(wù)進(jìn)行通信的時(shí)候,如何進(jìn)行負(fù)載均衡也是必然需要考慮的問(wèn)題
    2022-07-07
  • JavaWeb中的組件Filter過(guò)濾器解析

    JavaWeb中的組件Filter過(guò)濾器解析

    這篇文章主要介紹了JavaWeb中的組件Filter過(guò)濾器解析,Filter過(guò)濾器是一種用于處理和轉(zhuǎn)換數(shù)據(jù)的工具,常用于Web開發(fā)中,它可以在請(qǐng)求到達(dá)服務(wù)器之前或響應(yīng)返回給客戶端之前對(duì)數(shù)據(jù)進(jìn)行預(yù)處理或后處理,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

金秀| 大同县| 南阳市| 台中市| 石台县| 安康市| 大荔县| 延安市| 阳江市| 璧山县| 兴隆县| 南江县| 丹巴县| 安岳县| 临沭县| 贞丰县| 宁海县| 江城| 客服| 卢龙县| 洪江市| 广丰县| 栖霞市| 阿拉善右旗| 疏勒县| 普兰县| 包头市| 福海县| 宝鸡市| 五常市| 白银市| 贡觉县| 元朗区| 鄢陵县| 台州市| 靖边县| 红桥区| 无棣县| 孙吴县| 旬邑县| 称多县|