最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

編程小知識(shí)【java-0010】java常用開(kāi)發(fā)庫(kù)-日志庫(kù)

2023-06-14 13:06 作者:退役程序員老馬  | 我要投稿

日志庫(kù)包含日志系統(tǒng)日志門(mén)面。

日志庫(kù)的使用, 包含配置與API使用;配置側(cè)重于日志系統(tǒng)的配置,API使用側(cè)重于日志門(mén)面。

日志系統(tǒng)

日志系統(tǒng)指的是具體的日志框架,這里我們只說(shuō)一下最常用的log4j2、logback,而JUL、log4j現(xiàn)階段基本不常見(jiàn)了。

Log4j2

Log4j2是Log4j 的升級(jí)版,Log4j2 和 Log4j1.x 并不兼容,設(shè)計(jì)上很大程度上模仿了 SLF4J/Logback,性能上也獲得了很大的提升。Log4j2 也做了 Facade/Implementation 分離的設(shè)計(jì),分成了 log4j-api 和 log4j-core。

Logback

Logback 是springBoot默認(rèn)的日志處理框架,同時(shí)它和log4j都是出自同一作者之手,提供了性能更好的實(shí)現(xiàn),異步 logger,F(xiàn)ilter等更多的特性。

logback 當(dāng)前分成三個(gè)模塊:logback-core、logback-classic 和 logback-access。

  • logback-core - 是其它兩個(gè)模塊的基礎(chǔ)模塊。

  • logback-classic - 是 log4j 的一個(gè) 改良版本。此外 logback-classic 完整實(shí)現(xiàn) SLF4J API 使你可以很方便地更換成其它日志系統(tǒng)如 log4j 或 JDK14 Logging。

  • logback-access - 訪問(wèn)模塊與 Servlet 容器集成提供通過(guò) Http 來(lái)訪問(wèn)日志的功能。

Logback vs Log4j2

  • log4j2比logback更新:log4j2的GA版在2014年底才推出,比logback晚了好幾年,這期間log4j2確實(shí)吸收了slf4j和logback的一些優(yōu)點(diǎn)(比如日志模板),同時(shí)應(yīng)用了不少的新技術(shù)。

  • 由于采用了更先進(jìn)的鎖機(jī)制和LMAX Disruptor庫(kù),log4j2的性能優(yōu)于logback,特別是在多線程環(huán)境下和使用異步日志的環(huán)境下。

  • 二者都支持Filter(應(yīng)該說(shuō)是log4j2借鑒了logback的Filter),能夠?qū)崿F(xiàn)靈活的日志記錄規(guī)則(例如僅對(duì)一部分用戶(hù)記錄debug級(jí)別的日志)。

  • 二者都支持對(duì)配置文件的動(dòng)態(tài)更新。

  • 二者都能夠適配slf4j,logback與slf4j的適配應(yīng)該會(huì)更好一些,畢竟省掉了一層適配庫(kù)。

  • logback能夠自動(dòng)壓縮/刪除舊日志。

  • logback提供了對(duì)日志的HTTP訪問(wèn)功能。

  • log4j2實(shí)現(xiàn)了“無(wú)垃圾”和“低垃圾”模式。簡(jiǎn)單地說(shuō),log4j2在記錄日志時(shí),能夠重用對(duì)象(如String等),盡可能避免實(shí)例化新的臨時(shí)對(duì)象,減少因日志記錄產(chǎn)生的垃圾對(duì)象,減少垃圾回收帶來(lái)的性能下降。

  • log4j2和logback各有長(zhǎng)處,總體來(lái)說(shuō),如果對(duì)性能要求比較高的話,log4j2相對(duì)還是較優(yōu)的選擇。

日志門(mén)面

為什么有了日志系統(tǒng)之后我們直接用不就好了,為什么還要弄一個(gè)日志門(mén)面呢?

這其中做重要的一點(diǎn)就是解耦合,slf4j和Commons-Logging都是提供日志門(mén)面的,用戶(hù)可以選擇第三方的日志組件來(lái)作為具體實(shí)現(xiàn)。提供日志的接口和獲取具體日志對(duì)象的方法。這樣就避免了我們的應(yīng)用和日志方案的直接耦合,如果需要有改動(dòng)日志方案時(shí),我們可以直接修改日志實(shí)現(xiàn)。因?yàn)槿罩鹃T(mén)面一般都兼容大多數(shù)的日志框架。

總結(jié)下日志門(mén)面的作用:

  • 面向接口開(kāi)發(fā),不再依賴(lài)具體的實(shí)現(xiàn)類(lèi),減少代碼的耦合;

  • 項(xiàng)目通過(guò)導(dǎo)入不同的日志實(shí)現(xiàn)類(lèi),可以靈活的切換日志框架;

  • 統(tǒng)一API,方便開(kāi)發(fā)者學(xué)習(xí)和使用;

  • 統(tǒng)一配置便于項(xiàng)目日志的管理。

common-logging

common-logging 的功能是提供日志功能的 API 接口,本身并不提供日志的具體實(shí)現(xiàn)(當(dāng)然,common-logging 內(nèi)部有一個(gè) Simple logger 的簡(jiǎn)單實(shí)現(xiàn),但是功能很弱,直接忽略),而是在運(yùn)行時(shí)動(dòng)態(tài)的綁定日志實(shí)現(xiàn)組件來(lái)工作(如 log4j、java.util.loggin)。

SLF4J

簡(jiǎn)單日志門(mén)面(Simple Logging Facade For Java) SLF4J主要是為了給Java日志訪問(wèn)提供一套標(biāo)準(zhǔn)、規(guī)范的API框架,其主要意義在于提供接口,具體的實(shí)現(xiàn)可以交由其他日志框架,例如log4j和logback等。

對(duì)于一般的Java項(xiàng)目而言,日志框架會(huì)選擇slf4j-api作為門(mén)面,配上具體的實(shí)現(xiàn)框架(log4j、logback等),中間使用橋接器完成橋接。

注意:啟用slf4j庫(kù)意味著添加一個(gè)強(qiáng)制的依賴(lài),即slf4j-api.jar。如果在類(lèi)路徑上找不到綁定/提供程序,那么slf4j將默認(rèn)為無(wú)操作實(shí)現(xiàn)。

common-logging vs slf4j

兩者區(qū)別不大,slf4j 一大亮點(diǎn)是提供了更方便的日志記錄方式,common-logging日志輸出內(nèi)容需要拼接字符串,而slf4j 的方式是使用{}作為字符串替換符,實(shí)際項(xiàng)目中基本都會(huì)使用slf4j作為日志門(mén)面。

// common-logging
log.debug("time: " + time + ", name: " + name);
// slf4j
logger.debug("time: {}, name: {} ", time, name);


編程小知識(shí)【java-0010】java常用開(kāi)發(fā)庫(kù)-日志庫(kù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
杭锦后旗| 沙洋县| 新绛县| 墨脱县| 洪洞县| 新密市| 靖边县| 普兰店市| 铜鼓县| 黄浦区| 大化| 桦川县| 溆浦县| 淳化县| 微博| 交城县| 临朐县| 宁乡县| 理塘县| 康乐县| 甘德县| 长岭县| 依安县| 桦南县| 湘潭县| 桑植县| 株洲市| 涪陵区| 新疆| 张家港市| 界首市| 浮山县| 遂川县| 闽侯县| 平泉县| 镇坪县| 县级市| 靖西县| 定陶县| 安平县| 雅江县|