中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

遵義做網(wǎng)站的公司重慶電子商務(wù)網(wǎng)站seo

遵義做網(wǎng)站的公司,重慶電子商務(wù)網(wǎng)站seo,可以做我女朋友嗎網(wǎng)站,泰州網(wǎng)站建設(shè)方案推廣日志框架出現(xiàn)的歷史順序:Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中,我們分別講述了常用的2個(gè)日志框架:JUL(Java Util Logging)、Log4J。那么如何選擇使用哪一個(gè)呢? 根據(jù)項(xiàng)…

日志框架出現(xiàn)的歷史順序:Log4j → JUL → JCL → slf4j →?logback?→ log4j2

一、背景

在前面博文中,我們分別講述了常用的2個(gè)日志框架:JUL(Java Util Logging)、Log4J。那么如何選擇使用哪一個(gè)呢?

根據(jù)項(xiàng)目需求而定,在項(xiàng)目設(shè)計(jì)之初,功能比較單一簡(jiǎn)單,那么我們可以使用JUL日志框架,使用起來(lái)非常靈活,也不需要引入第三方依賴,隨著我們項(xiàng)目升級(jí),迭代維護(hù),功能會(huì)越來(lái)越完善,簡(jiǎn)單的日志實(shí)現(xiàn)框架就不能滿足我們的業(yè)務(wù)需求,那么就要進(jìn)行日志升級(jí)!

如果我們從JUL日志實(shí)現(xiàn)框架切換為L(zhǎng)og4j的話,代碼會(huì)受到?jīng)_突影響,雖然Log4j在1.2以后,為了迎合JUL的設(shè)計(jì)思想,也把自己代碼改成logger了,但它的日志級(jí)別和配置信息還是有一定的差異化,如果我們的日志代碼有一萬(wàn)行,那么都要進(jìn)行修改,這無(wú)疑是增加了很多工作量

二、JCL的誕生

????????為了解決這個(gè)問(wèn)題,apache組織就站出來(lái)了,它就將當(dāng)時(shí)比較主流的日志實(shí)現(xiàn)框架,例如 JUL、Log4j 將代碼統(tǒng)一成一套API,后期軟件開(kāi)發(fā)階段,只需要關(guān)聯(lián)這套統(tǒng)一的API,就可以操作某一個(gè)日志實(shí)現(xiàn)框架的日志記錄了,代碼無(wú)需發(fā)生改變。

以面向接口的方式,來(lái)操作具體的實(shí)現(xiàn)。一種解耦合的思想,這個(gè)技術(shù)就是:JCL

比如web應(yīng)用需要進(jìn)行日志記錄的話,不再直接依賴log4j、jdk14等日志實(shí)現(xiàn)了,而是依賴JCL這套統(tǒng)一的接口API,它會(huì)幫助我們調(diào)用具體的日志實(shí)現(xiàn):

三、JCL 是什么?


JCL 全稱為Jakarta Commons Logging,是Apache提供的一個(gè)通用日志API。

它是為 “所有的Java日志實(shí)現(xiàn)” 提供一個(gè)統(tǒng)一的接口,它自身也提供一個(gè)日志的實(shí)現(xiàn),但是功能非常弱(SimpleLog)。所以一般不會(huì)單獨(dú)使用它,它允許開(kāi)發(fā)人員使用不同的具體日志實(shí)現(xiàn)工具:Log4j,JDK自帶的日志(JUL)

JCL 有兩個(gè)基本的抽象類:Log(基本記錄器)和 LogFactory(負(fù)責(zé)創(chuàng)建Log實(shí)例)

???????快速入門(mén)案例:

? ? ? ? 引入依賴:

         <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>

? ? ? ? 代碼示例:

        // 獲取日志記錄器對(duì)象Log log = LogFactory.getLog(logDemo.class.getName());// 輸出日志log.info("info"); // 程序運(yùn)行信息,數(shù)據(jù)庫(kù)的連接、網(wǎng)絡(luò)、IO操作等

? ? ? ? 說(shuō)明:
? ? ? ? 1、首先跟log4j 和 JUL創(chuàng)建日志對(duì)象不同的是,JCL是用LogFactory創(chuàng)建的對(duì)象,創(chuàng)建的類型是Log不是Logger。
? ? ? ? 2、其次底層調(diào)用Log4j 或 JUL(Java util logging) ,具體調(diào)用哪個(gè)取決于引入了哪個(gè)組件,上述例子沒(méi)有引入Log4j依賴,因此它底層用的是JUL日志框架。
? ? ? ? ·

? ? ? ? 如果我們引入Log4j依賴:

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.13</version>
</dependency>

? ? ? ? ?更改引入類型,運(yùn)行代碼,會(huì)提示:

會(huì)提示:找不到logger對(duì)象的appenders處理器,它希望我們?cè)O(shè)置并初始化一個(gè)系統(tǒng)配置信息,因?yàn)長(zhǎng)og4j是需要初始化配置,或者引入配置文件的,所以要先加入配置文件,配置文件就不講了,前面的log4j已經(jīng)講過(guò),直接拷貝進(jìn)來(lái)就好。
再次運(yùn)行代碼就可以了。

四、JCL原理

其內(nèi)部主要通過(guò)LogFactory 日志工廠去加載具體的日志實(shí)現(xiàn):

1. 通過(guò)LogFactory動(dòng)態(tài)加載Log實(shí)現(xiàn)類

說(shuō)明:Log類是一個(gè)接口,其實(shí)現(xiàn)它有4個(gè)日志框架

  • SimpleLog:JCL的內(nèi)置日志實(shí)現(xiàn)
  • Log4JLogger:log4j 日志框架
  • Jdk14Logger:JUL(Java Util Logging)
  • Jdk13LumberjackLogger:Jdk老版本的內(nèi)置日志實(shí)現(xiàn)

?2. 日志門(mén)面支持的日志實(shí)現(xiàn)數(shù)組
public class LogFactoryImpl extends LogFactory {.....private static final String[] classesToDiscover = new String[].?{"org.apache.commons.logging.impl.Log4JLogger",?"org.apache.commons.logging.impl.Jdk14Logger",?"org.apache.commons.logging.impl.Jdk13LumberjackLogger",?"org.apache.commons.logging.impl.SimpleLog"};.....}


? 說(shuō)明:日志工廠其內(nèi)部有一個(gè)加載日志的數(shù)組,加載順序是按照數(shù)組順序來(lái)的,這也解釋了為什么入門(mén)案例中引入了Log4J,JCL內(nèi)部日志框架就從JUL切換至Log4J了。

3. 具體實(shí)現(xiàn)代碼

for(int i = 0; i < classesToDiscover.length && result == null; ++i) {
? ? result = this.createLogFromClass(classesToDiscover[i], logCategory, true);
}
? 說(shuō)明:通過(guò)日志數(shù)組順序加載日志框架,如果沒(méi)有找到,則繼續(xù)加載下一個(gè),否則直接返回。

? 源碼斷點(diǎn)查看執(zhí)行流程


1. 測(cè)試類中斷點(diǎn)debug模式進(jìn)入

2. 進(jìn)入到內(nèi)部實(shí)現(xiàn),首先初始化的是一個(gè)日志工廠 getFactory()

2. 我們暫時(shí)不關(guān)心它的實(shí)現(xiàn),因此直接跳出 getFactory()

3. 繼續(xù)點(diǎn)擊進(jìn)入 ,會(huì)進(jìn)入到getInstance(clazz) 方法內(nèi)部

4. getInstance(clazz)方法如下,其實(shí)際進(jìn)行了一次封裝,因此進(jìn)入到內(nèi)部實(shí)際初始化代碼中

5. 對(duì)象初始化代碼實(shí)現(xiàn)如下,進(jìn)入點(diǎn)擊進(jìn)入到 discoverLogImplementation 方法

6. ?discoverLogImplementation 方法才是最終加載具體日志框架的實(shí)現(xiàn),for循環(huán)加載日志數(shù)組,第一個(gè)是log4j,如果加載成功,則直接返回,否則按照順序往下遍歷加載

7. for 循環(huán)加載方法 this.createLogFromClass(),其內(nèi)部實(shí)現(xiàn)是通過(guò)反射進(jìn)行記載日志框架的

8. 由于我們?cè)黾恿薼og4j依賴,因此直接可以拿到log4j的類名,進(jìn)行反射獲取到,最后直接返回

SimpleLog:JCL的內(nèi)置日志實(shí)現(xiàn)
Log4JLogger:log4j 日志框架
Jdk14Logger:JUL(Java Util Logging)
Jdk13LumberjackLogger:Jdk老版本的內(nèi)置日志實(shí)現(xiàn)

日志門(mén)面技術(shù)(3):JCL(Jakarta Commons Logging)_jakartacommonsloggingimpl-CSDN博客

http://www.risenshineclean.com/news/40499.html

相關(guān)文章:

  • 家用電腦如何做網(wǎng)站服務(wù)器百度總部公司地址在哪里
  • 做網(wǎng)站可以用什么語(yǔ)言長(zhǎng)春網(wǎng)站優(yōu)化平臺(tái)
  • 購(gòu)物網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營(yíng)銷管理名詞解釋
  • wordpress國(guó)內(nèi)支付上海搜索優(yōu)化推廣
  • html可以做動(dòng)態(tài)網(wǎng)站嗎我是seo關(guān)鍵詞
  • 應(yīng)用商城下載seo服務(wù)是什么
  • 怎么用文件做網(wǎng)站快速優(yōu)化網(wǎng)站排名軟件
  • 淄博桓臺(tái)網(wǎng)站建設(shè)報(bào)價(jià)湘潭關(guān)鍵詞優(yōu)化公司
  • erp系統(tǒng)軟件免費(fèi)版優(yōu)化營(yíng)商環(huán)境心得體會(huì)2023
  • 番禺做網(wǎng)站公司哪家好網(wǎng)店推廣的方式
  • 一般做網(wǎng)站淘寶推廣軟件
  • 德州網(wǎng)站建設(shè)公司seo引擎優(yōu)化方案
  • 什么學(xué)做網(wǎng)站深圳網(wǎng)絡(luò)營(yíng)銷推廣外包
  • php網(wǎng)站搬家軟件成都疫情最新消息
  • 有沒(méi)有做美食的網(wǎng)站網(wǎng)絡(luò)營(yíng)銷的認(rèn)識(shí)與理解
  • 阿里云空間部署網(wǎng)站微信推廣加人
  • 設(shè)計(jì)網(wǎng)站推薦素材網(wǎng)站怎么去做推廣
  • 青島網(wǎng)站建設(shè)優(yōu)化長(zhǎng)沙官網(wǎng)seo推廣
  • 游戲推廣群seo網(wǎng)絡(luò)優(yōu)化招聘信息
  • sql數(shù)據(jù)庫(kù)查詢網(wǎng)站模板搜索引擎優(yōu)化的要點(diǎn)
  • 做網(wǎng)站必須得ipc百度熱搜榜今日頭條排名
  • 日照建網(wǎng)站廣告公司收費(fèi)價(jià)格表
  • 網(wǎng)站怎么弄二維碼服務(wù)營(yíng)銷理論
  • 官網(wǎng)網(wǎng)站建設(shè)收費(fèi)公司網(wǎng)站設(shè)計(jì)模板
  • 海南做網(wǎng)站請(qǐng)輸入搜索關(guān)鍵詞
  • 網(wǎng)頁(yè)版夢(mèng)幻西游火眼金睛seo人才招聘
  • 南京seo排名收費(fèi)廣州網(wǎng)站優(yōu)化軟件
  • 做網(wǎng)站的任務(wù)書(shū)淄博seo培訓(xùn)
  • 湖州做網(wǎng)站建設(shè)的公司女教師遭網(wǎng)課入侵直播錄屏曝光se
  • java做網(wǎng)站用什么軟件新聞報(bào)道最新消息今天