精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讓你10分鐘徹底了解Java中混亂的日志體系

開發(fā) 后端
說到日志工具,日常工作或?qū)W習(xí)中肯定聽說過這些名詞:log4j、logback、jdk-logging、slf4j、commons-logging等,它們之間有什么關(guān)系呢,在整個日志體系中又扮演什么角色呢?

日志框架分為三大部分,包括日志門面、日志適配器、日志庫。利用門面設(shè)計(jì)模式,即Facade來進(jìn)行解耦,使日志使用變得更加簡單,如下圖:

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

日志門面

門面設(shè)計(jì)模式是面向?qū)ο笤O(shè)計(jì)模式中的一種,日志框架采用的就是這種模式,類似JDBC的設(shè)計(jì)理念。它只提供一套接口規(guī)范,自身不負(fù)責(zé)日志功能的實(shí)現(xiàn),目的是讓使用者不許奧關(guān)注底層具體是哪個日志庫來負(fù)責(zé)日志打印及具體的使用字節(jié)等。目前用得最廣泛的日志門面有 slf4j和commons-logging。

日志庫

它具體實(shí)現(xiàn)了日志的相關(guān)的功能,主流的日志庫有三個: log4j、log-jdk、logback。最早java 要想記錄只能通過System.out 或 System.err 來完成,非常不方便。log4j 就是為了解決這一問題而提出的,它是最早誕生的日志庫。接著JDK也在1.4 版本引入一個日志庫 java.util.logging.Logger,簡稱 log-jdk。這樣市面上就出現(xiàn)兩種日志功能的實(shí)現(xiàn),開發(fā)者在使用時需要關(guān)注所使用的日志庫的具體字節(jié)。logback是最晚出現(xiàn)的,它與log4j出自同一個作者,是log4j的升級版且本身就實(shí)現(xiàn)了 slf4j 的接口。

日志適配器

日志適配器分為兩種場景:

(1) 日志門面適配器,因?yàn)閟lf4j 規(guī)范是后來提出的,在此之前的日志庫沒有實(shí)現(xiàn) slf4j 的接口的,例如 log4j, 所以,在工程里要想使用slf4j + log4j 的模式,就額外需要一個適配器(slf4j + log4j2) 來解決接口不兼容的問題。

(2) 日志適配器,在一些老的工程,一開始為了開發(fā)簡單而直接使用了日志庫API 來完成日志打印,隨著時間的推移想將原來直接調(diào)用日志庫的模型改為業(yè)界標(biāo)準(zhǔn)的門面模式 ( 例如 slf4j +logback 組合) ,但老工程代碼里的打印日志的地方太多,難以改變,所以需要一個適配器來完成從舊日志庫的API到slf4j的路由,這樣在不改動原有代碼的情況下也能使用slf4j來統(tǒng)一管理日志,而且后續(xù)自由替換具體日志庫也不成問題。

1、Apache Commons Logging(JCL)

Commons本身只提供日志接口,具體實(shí)現(xiàn)在運(yùn)行時 動態(tài)尋找對應(yīng)組件?思路上類似于JDBC的抽象。

JCL動態(tài)查找(綁定)日志組件原理如下:

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

JCL為每一種日志采用了一個適配器,具體采用哪一個,是動態(tài)根據(jù)指定順序查找classpath是否存在相應(yīng)日志的實(shí)現(xiàn),如果JCL運(yùn)行時沒有找到任何一種第三方的日志實(shí)現(xiàn),則就使用jdk14自帶的java.util.logging(JUL)。

Spring日志就是采JCL,解決了應(yīng)用程序和框架日志不統(tǒng)一的問題,動態(tài)去尋找(應(yīng)用程序配置)日志體系的實(shí)現(xiàn)。

默認(rèn)的LogFactory是按照下列的步驟去發(fā)現(xiàn)并決定哪個日志工具將被使用的,LogFactory按照順序?qū)ふ?,找到第一個工具后中止。

  1. 首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實(shí)現(xiàn)類;
  2. 如果找不到commons-logging.properties文件,則在查找是否已定義系統(tǒng)環(huán)境變量org.apache.commons.logging.Log,找到則使用其定義的Log實(shí)現(xiàn)類;
  3. 否則,查看classpath中是否有Log4j的包,如果發(fā)現(xiàn),則自動使用Log4j作為日志實(shí)現(xiàn)類;
  4. 否則,使用JDK自身的日志實(shí)現(xiàn)類(JDK1.4以后才有日志實(shí)現(xiàn)類);
  5. 否則,使用commons-logging自己提供的一個簡單的日志實(shí)現(xiàn)類SimpleLog;

2、SLF4j(Simple Logging Facade for java)

與JCL類似,本身不提供具體實(shí)現(xiàn),只對外提供接口或者門面,因此它不是具體的日志解決方案,而是通過Facade Pattern 門面模式對外提供一些 java logging api,這些對外提供的核心API就是一些接口以及LoggerFactory的工程類。

與Common logging 不同的是其采用在ClassPath下尋找一下jar包來表示具體的采用哪種實(shí)現(xiàn)

  1. slf4j-log4j12.jar(表示指定logh4j)
  2. slf-jdk14.jar(表示使用JUL)
  3. slf4j-jcl.jar(表示使用JCL)
  4. log4j-slf4j-impl.jar(表示指定log4j2)
  5. logback-classic(logback)

SLF4j 靜態(tài)綁定日志組件原理:

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

3、常見的日志組件

 

 

4. 適用場景

4.1 slf4j 使用log4j打印日志

  1. slf4j-api.jar
  2. slf4j-log4j12.jar
  3. log4j.jar

JCL方式的common-logging 是動態(tài)查找綁定

SLF4j 是靜態(tài)綁定,需要加上橋接包,如 SLF4j-log4j2

可通過如下配置進(jìn)行集成

  1. <!--slf4j門面 -->  
  2.        <dependency>  
  3.            <groupId>org.slf4j</groupId>  
  4.            <artifactId>slf4j-api</artifactId>  
  5.            <version>${slf4j-api.version}</version>  
  6.        </dependency>  
  7.        <dependency>  
  8.            <groupId>org.slf4j</groupId>  
  9.            <artifactId>slf4j-log4j12</artifactId>  
  10.            <version>${slf4j-log4j12.jar.version}</version>  
  11.        </dependency>  
  12.        <dependency>  
  13.            <groupId>log4j</groupId>  
  14.            <artifactId>log4j</artifactId>  
  15.            <version>${log4j.version}</version>  
  16.        </dependency>  

 

如果是老代碼中直接使用了 log4j 日志庫提供的接口來打印日志,則還需要引入日志庫適配器,配置實(shí)例如下所示:

  1. <dependency>  
  2.             <groupId>org.slf4j</groupId>  
  3.             <artifactId>log4j-over-slf4j</artifactId>  
  4.             <version>${log4j-over-slf4j.version}</version>  
  5.         </dependency>  

 

4.2 slf4j 使用logback打印日志

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

如果是新工程,則推薦使用slf4j+logback 模式,因?yàn)閘ogback 自身實(shí)現(xiàn)了 slf4j的接口,無須額外引入適配器,另外,logback 是 log4j 的升級版,具備比log4j更多的優(yōu)點(diǎn),可通過如下配置進(jìn)行集成:

  1. <dependency>  
  2.      <groupId>org.slf4j</groupId>  
  3.      <artifactId>slf4j-api</artifactId>  
  4.      <version>${slf4j.version}</version>  
  5.  </dependency>  
  6.   
  7.  <dependency>  
  8.      <groupId>ch.qos.logback</groupId>  
  9.      <artifactId>logback-core</artifactId>  
  10.      <version>${logback.version}</version>  
  11.  </dependency>  
  12.   
  13.  <dependency>  
  14.      <groupId>ch.qos.logback</groupId>  
  15.      <artifactId>logback-classic</artifactId>  
  16.      <version>${logback.version}</version>  
  17.  </dependency>  

 

4.3 spring 集成log4j2

我們應(yīng)用使用的是log4j2打印日志;而Spring采用的JCL中不包含log4j2,運(yùn)行時,JCL從ClassPath下尋找日志的實(shí)現(xiàn),如果沒有引用其他實(shí)現(xiàn),最終會使用JUL實(shí)現(xiàn)。如下圖:

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

這時候會出現(xiàn)什么問題呢?

Spring打印日志和應(yīng)用程序的打印日志不統(tǒng)一,錯誤排除還比較困難,而且應(yīng)用程序和Spring框架,日志不統(tǒng)一,太亂了。

為了讓Spring和我們的應(yīng)用程序,采用統(tǒng)一的log4j2日志體系,需要加入適配器,改善上面應(yīng)用程序和框架日志的統(tǒng)一問題(加入適配器后),如下圖:

 

讓你10分鐘徹底了解Java中混亂的日志體系
  1. <dependencies>  
  2.         <!--slf4j門面 -->  
  3.         <dependency>  
  4.             <groupId>org.slf4j</groupId>  
  5.             <artifactId>slf4j-api</artifactId>  
  6.             <version>1.7.25</version>  
  7.         </dependency>  
  8.        <!-- SLF2j-log4j2的橋接-->  
  9.         <dependency>  
  10.             <groupId>org.apache.logging.log4j</groupId>  
  11.             <artifactId>log4j-slf4j-impl</artifactId>  
  12.             <version>2.3</version>  
  13.         </dependency>  
  14.   
  15.       <!-- jcl 橋接 SLF4j -->  
  16.         <dependency>  
  17.             <groupId>org.slf4j</groupId>  
  18.             <artifactId>jcl-over-slf4j</artifactId>  
  19.             <version>1.7.13</version>  
  20.         </dependency>  
  21.   
  22.        <!-- log4j2 -->  
  23.         <dependency>  
  24.             <groupId>org.apache.logging.log4j</groupId>  
  25.             <artifactId>log4j-core</artifactId>  
  26.             <version>2.3</version>  
  27.         </dependency>  
  28.         <dependency>  
  29.             <groupId>org.apache.logging.log4j</groupId>  
  30.             <artifactId>log4j-api</artifactId>  
  31.             <version>2.3</version>  
  32.         </dependency>  
  33.         <dependency>  
  34.             <groupId>com.lmax</groupId>  
  35.             <artifactId>disruptor</artifactId>  
  36.             <version>3.3.4</version>  
  37.         </dependency> 

 

SLF4j集成其他日志框架的方法:

 

讓你10分鐘徹底了解Java中混亂的日志體系

 

5、優(yōu)秀實(shí)踐

在使用SLF4J使用時,需要注意以下事項(xiàng):

  1. private static final Logger LOGGER = LoggerFactory.getLogger(XXX.class);   

logger被定義為static 變量,是因?yàn)檫@個LOGGER與當(dāng)前類綁定,避免每次都new一個新對象,造成資源浪費(fèi)。

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2017-06-07 18:40:33

PromiseJavascript前端

2024-04-28 12:55:46

redis頻道機(jī)制

2023-07-15 18:26:51

LinuxABI

2020-10-13 18:22:58

DevOps工具開發(fā)

2020-11-06 08:54:43

Vue 3.0函數(shù)代碼

2017-11-20 10:25:20

數(shù)據(jù)庫MySQL索引

2021-01-07 08:05:20

JenkinsDevOps

2021-05-17 20:13:50

數(shù)倉操作型數(shù)據(jù)庫

2021-04-23 09:50:41

topLinux命令

2021-03-04 09:26:57

微服務(wù)架構(gòu)數(shù)據(jù)

2011-06-10 14:19:49

SEO百度收錄

2009-11-05 10:56:31

WCF通訊

2018-03-12 21:31:24

區(qū)塊鏈

2023-12-25 14:50:39

Python迭代器

2018-11-28 10:39:48

APP網(wǎng)絡(luò)代碼

2021-06-18 07:34:12

Kafka中間件微服務(wù)

2009-07-06 15:50:01

微軟Windows 7操作系統(tǒng)

2009-10-27 09:17:26

VB.NET生成靜態(tài)頁

2015-11-12 10:32:40

GitHub控制系統(tǒng)分布式

2018-03-12 14:37:50

區(qū)塊鏈比特幣架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲成人日韩在线| 久色视频在线播放| 国产裸体永久免费无遮挡| 欧美一区亚洲| 亚洲精品aⅴ中文字幕乱码| 精品久久一二三| 国产女主播在线直播| 日韩国产高清在线| 欧美精品少妇videofree| 中文字幕免费在线播放| 国产精品诱惑| 亚洲777理论| 日本成人黄色| 亚洲a视频在线观看| 丝袜美腿高跟呻吟高潮一区| 久久精品夜夜夜夜夜久久| 97人妻精品一区二区三区免费| 日本免费久久| 亚洲综合999| 天堂资源在线亚洲视频| 亚洲精品一区二区口爆| 日本欧美韩国一区三区| 欧美高清在线观看| 国产熟妇搡bbbb搡bbbb| 91精品亚洲一区在线观看| 五月婷婷激情综合| 日韩视频一二三| 日本不卡免费播放| 成人永久看片免费视频天堂| 国产精品自拍偷拍| 天天爽夜夜爽夜夜爽精品| 91精品国偷自产在线电影| 亚洲色无码播放| 日本xxxx免费| av成人在线网站| 在线视频欧美精品| 成人午夜精品久久久久久久蜜臀| 老司机午夜在线视频| 久久品道一品道久久精品| 99re在线观看视频| 国产精品久久久久久久一区二区| 久久精品女人天堂| 久久久久久久久亚洲| www.xx日本| 精品久久久久久久久久久下田| 精品国产乱码久久| 五月天国产视频| 日韩成人在线电影| 欧美视频完全免费看| 婷婷五月综合缴情在线视频| 日本在线视频www鲁啊鲁| 综合亚洲深深色噜噜狠狠网站| 日韩电影大全在线观看| 日韩一区av| 久久这里只有精品6| 国内精品久久久久久久果冻传媒| aaa级黄色片| 国产一区二区影院| 147欧美人体大胆444| 一级黄色片免费| 蜜臀av一区二区在线观看| 国产成人一区三区| 久久国产乱子伦精品| 美女精品网站| 国产精品a久久久久久| 无码人妻精品一区二区50| 媚黑女一区二区| 日韩av免费看| 国产污视频网站| 美女网站色91| 91在线免费看网站| 丰满人妻av一区二区三区| 高清国产一区二区| 国产综合第一页| 欧美少妇另类| 国产欧美日产一区| 亚洲成人精品电影在线观看| 91这里只有精品| 亚洲三级视频在线观看| 日本高清视频免费在线观看| 2019中文字幕在线电影免费 | 欧美人xxxx| 伊人成人免费视频| 国产精品99久久免费观看| 亚洲福利小视频| 粉嫩av蜜桃av蜜臀av| 国产成人三级| 久久久精品视频成人| 久久久99精品| 麻豆久久精品| 91精品久久久久久久久| 亚洲第一视频在线播放| 99久久777色| 神马影院我不卡午夜| 免费看a在线观看| 亚洲一区二区三区爽爽爽爽爽| 可以看毛片的网址| 成人在线黄色| 日韩精品一区在线观看| 黄色aaa视频| 综合av在线| 日韩av片免费在线观看| 一卡二卡在线视频| 99久久精品国产导航| 性欧美大战久久久久久久免费观看| 成人高清免费在线| 欧美日韩国产专区| 九九九九九九九九| 西野翔中文久久精品国产| 精品国产欧美一区二区五十路| 成人午夜视频精品一区| 久久精品国产99国产| 国产欧美日韩亚洲| 欧美精品日韩少妇| 色av成人天堂桃色av| 午夜xxxxx| 国产精选一区| 性欧美xxxx交| 国产美女裸体无遮挡免费视频| 97精品超碰一区二区三区| 中文字幕一区二区三区在线乱码| 麻豆免费版在线观看| 91精品免费在线| 日本成人免费视频| 亚洲精品精选| 91入口在线观看| av在线天堂播放| 欧美三级xxx| 亚洲少妇中文字幕| 婷婷综合五月| 国产精品老牛影院在线观看| 香蕉久久一区二区三区| 亚洲精品高清在线观看| 五月婷婷之婷婷| 国产精品最新| 国产mv久久久| 欧美xxx.com| 精品国产户外野外| 精品无码av一区二区三区| 成人激情开心网| 国产精品99久久99久久久二8| 亚洲AV第二区国产精品| 亚洲国产精品麻豆| 91porn在线| 亚洲一级影院| 国产精品v欧美精品v日韩精品| 久草资源在线观看| 欧美精品日韩综合在线| 精品一区二区三区蜜桃在线| 男女精品网站| 日本不卡二区| 色猫猫成人app| 色婷婷综合成人| 伊人网av在线| 日韩一区日韩二区| 天美一区二区三区| 午夜视频精品| 国产成人精品免费视频大全最热| 国产福利视频在线| 欧美一级xxx| 国产第一页在线播放| 成人精品电影在线观看| 久久久久久久久久久99| 色狼人综合干| 国产精品a久久久久久| 成人精品一区二区三区免费| 欧美性感一类影片在线播放| 91无套直看片红桃在线观看| 美女一区二区三区| 手机看片日韩国产| 国产精品日本一区二区三区在线| 伦理中文字幕亚洲| 北条麻妃一二三区| 五月婷婷激情综合| 国产91丝袜美女在线播放| 久久国产精品露脸对白| 黄色一级大片免费| 伊人久久大香线蕉| 成人女保姆的销魂服务| 久久99亚洲网美利坚合众国| 精品伊人久久97| 亚洲天天综合网| 依依成人精品视频| 51调教丨国产调教视频| 美国一区二区三区在线播放| 日本一本草久p| 秋霞蜜臀av久久电影网免费| 国产精品女视频| 在线看女人毛片| 日韩精品免费电影| 一级黄色a视频| 亚洲电影一区二区三区| 中文字幕黄色网址| 懂色av噜噜一区二区三区av| 欧美 日韩 国产 激情| 亚洲国产精品久久久天堂| 久久av一区二区| 日韩伦理一区二区| 91av在线免费观看视频| 免费观看在线黄色网| 亚洲国产天堂久久综合网| 中文字幕激情视频| 亚洲一本大道在线| 国产精品www爽爽爽| 国产揄拍国内精品对白| 免费看日本毛片| 欧美国产一级| 久久99精品国产99久久| 欧美成人高清视频在线观看| 91精品国产91| 欧美尤物美女在线| 亚洲精品国产电影| 亚洲综合久久网| 亚洲人成伊人成综合网小说| 西西大胆午夜视频| 极品美女销魂一区二区三区| 99热成人精品热久久66| 中文字幕午夜精品一区二区三区| 精品乱码一区| 国产美女亚洲精品7777| 国产suv精品一区二区三区88区| 日本中文字幕在线观看| 亚洲国产欧美久久| 国产又黄又粗又猛又爽| 欧美优质美女网站| 91国产丝袜播放在线| 中文字幕亚洲不卡| 熟女少妇内射日韩亚洲| 成人av在线看| 中文字幕一区二区三区四| 久热re这里精品视频在线6| 黄色成人在线免费观看| 欧美天天综合| 鲁丝一区二区三区免费| 91精品短视频| 欧美亚洲国产精品| 日本在线视频网址| 久久亚洲精品视频| lutube成人福利在线观看| 亚洲欧洲日韩国产| 午夜影院免费体验区| 日韩精品一区二区三区中文不卡| 国产成人无码av| 欧美午夜激情在线| 亚洲免费在线观看av| 亚洲成人资源在线| 欧美三级韩国三级日本三斤在线观看| 亚洲乱码精品一二三四区日韩在线| 国产精品国产三级国产专区53| 欧美特黄aaa| 西西人体一区二区| 亚洲一区3d动漫同人无遮挡| 第九色区aⅴ天堂久久香| 美女精品国产| 日韩精品欧美大片| 蜜桃成人在线| 窝窝社区一区二区| 久久精品欧美| 国产96在线亚洲| 久久国产精品 国产精品| 国产精品xxx在线观看| 91福利视频导航| 97久久亚洲| 99视频网站| 亚洲综合影院| 激情一区二区三区| 牛牛视频精品一区二区不卡| 精品国产乱码一区二区三区四区 | 日韩美女一区二区三区在线观看| 久久一区二区精品| 精品成人影院| 欧美一区二区三区电影在线观看| 五月天亚洲一区| 日韩久久不卡| 欧美亚洲精品在线| 亚洲一区二三| 久久一区二区三区喷水| 无码毛片aaa在线| 国自产拍偷拍福利精品免费一| 国产乱子伦精品视频| 99成人在线| 国产无套内射久久久国产| 视频在线观看91| 日韩一级在线免费观看| 美国av一区二区| 欧美又黄又嫩大片a级| 美腿丝袜一区二区三区| 青青草精品在线| 不卡av在线网| 在线观看日本中文字幕| 亚洲美女视频在线观看| 国产在线视频你懂的| 欧美午夜女人视频在线| 国产一区二区三区三州| 欧美videofree性高清杂交| 少妇精品视频一区二区 | 欧美黑人视频一区| 欧美性天天影视| 国内自拍欧美激情| 精品国产第一福利网站| 国产精品视频区| 精品av导航| 午夜精品区一区二区三| 91不卡在线观看| 四虎永久在线精品无码视频| 蜜臀va亚洲va欧美va天堂| 亚洲精品成人无码毛片| 99精品久久久久久| 日本不卡一区视频| 亚洲成人第一页| 免费视频久久久| 日韩欧美123| 男女污污视频在线观看| 久久久成人精品视频| 久久91导航| 亚洲在线www| 日韩高清一级| 亚洲精品一区二区三区樱花| 国产精品s色| 国产小视频精品| 成人av综合一区| 我想看黄色大片| 婷婷成人激情在线网| 国产精品久久久久久免费免熟| 亚洲欧洲日韩国产| 黑人玩欧美人三根一起进| 国产精品久久久久免费a∨大胸| 国内毛片久久| 国产福利片一区二区| 久久久久一区| 亚洲精品在线视频免费观看| 樱桃国产成人精品视频| 国产精华7777777| 日韩国产高清视频在线| 里番在线观看网站| 国产精品成人观看视频国产奇米| 国产精品色呦| 经典三级在线视频| 久久精品国产一区二区三区免费看| 亚洲视频在线播放免费| 亚洲精品一二三| 亚洲一区二区影视| 中文字幕亚洲天堂| 国产免费不卡| 精品一区二区国产| 国产亚洲在线| 亚洲高清无码久久| 亚洲人成精品久久久久久| 国产亲伦免费视频播放| 中文字幕欧美日韩va免费视频| 国产色播av在线| 精品乱码一区| 夜夜嗨一区二区| 尤物网站在线观看| 午夜在线电影亚洲一区| 精品人妻一区二区三区换脸明星 | 91精品国产高清久久久久久91裸体 | 青青草原成人在线视频| 好吊妞视频这里有精品| heyzo亚洲| av综合在线播放| 亚州国产精品视频| 亚洲精品一区中文| 大胆人体一区二区| 欧美日本韩国国产| 美国av一区二区| 国产麻豆a毛片| 欧美亚洲国产bt| 主播国产精品| 99久久自偷自偷国产精品不卡| 91欧美在线| 97免费公开视频| 一区二区三区中文在线| 五月婷婷丁香花| 欧亚精品中文字幕| 欧美亚洲精品在线| 午夜性福利视频| 午夜在线成人av| 亚洲色图另类小说| 国产精品一区二区三| 欧美成人激情| www国产视频| 色老汉一区二区三区| av在线1区2区| 亚洲最大成人在线| 亚洲精品1区| www成人啪啪18软件| 69堂精品视频| 国产美女情趣调教h一区二区| 欧美h视频在线| 激情久久五月天| 欧美偷拍第一页| 日韩大陆欧美高清视频区| 美女100%一区| www.夜夜爱| 久久夜色精品一区| 久久久久久久久久一级| 欧美二区在线播放| 网友自拍区视频精品| 少妇丰满尤物大尺度写真|