欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java日志框架用法及常見(jiàn)問(wèn)題解決方案

 更新時(shí)間:2020年10月10日 16:22:45   作者:難得糊涂1998  
這篇文章主要介紹了Java日志框架用法及常見(jiàn)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

日志定義:

在計(jì)算機(jī)領(lǐng)域,日志文件(logfile)是一個(gè)記錄了發(fā)生在運(yùn)行中的操作系統(tǒng)或其他軟件中的事件的文件,或者記錄了在網(wǎng)絡(luò)聊天軟件的用戶之間發(fā)送的消息。

日志記錄(Logging):是指保存日志的行為。最簡(jiǎn)單的做法是將日志寫(xiě)入單個(gè)存放日志的文件。

日志級(jí)別優(yōu)先級(jí):

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

日志框架的作用:

①:跟蹤用戶對(duì)系統(tǒng)訪問(wèn),記錄了系統(tǒng)行為的時(shí)間、地點(diǎn)、狀態(tài)等相關(guān)信息,能夠幫助我們了解并監(jiān)控系統(tǒng)狀態(tài)

②:進(jìn)行統(tǒng)計(jì)

③:進(jìn)行Debug,在系統(tǒng)產(chǎn)生問(wèn)題時(shí),能夠幫助我們快速的定位、診斷并解決問(wèn)題。

在發(fā)生錯(cuò)誤或者接近某種危險(xiǎn)狀態(tài)時(shí)能夠及時(shí)提醒我們處理

常用的日志框架類別簡(jiǎn)介:

  • Log4j Apache Log4j是一個(gè)基于Java的日志記錄工具。它是由Ceki Gülcü首創(chuàng)的,現(xiàn)在則是Apache軟件基金會(huì)的一個(gè)項(xiàng)目。 Log4j是幾種Java日志框架之一。
  • Log4j 2 Apache Log4j 2是apache開(kāi)發(fā)的一款Log4j的升級(jí)產(chǎn)品,Log4j被apache收購(gòu),升級(jí),改為log4j2,框架改動(dòng)很大,只是借用之名。
  • JCL (Jakarta Commons Logging) Apache基金會(huì)所屬的項(xiàng)目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging。
  • Slf4j(Simple Logging Facade for Java) 類似于Commons Logging,是一套簡(jiǎn)易Java日志門(mén)面,本身并無(wú)日志的實(shí)現(xiàn)。
  • Logback 一套日志組件的實(shí)現(xiàn)(slf4j陣營(yíng))。
  • JUL (Java Util Logging),自Java1.4以來(lái)的官方日志實(shí)現(xiàn),已被淘汰。
  • jboss-logging 等。

Spring框架內(nèi)部使用的日志框架是 JCL (Jakarta Commons Logging)

Mybatis框架中使用的是 Log4j

Hibernate框架中使用的是 jboss-logging

Springboot底層使用的是 SLF4j + Logback

(Log4j,Logback,SLF4j都是同一個(gè)作者。)

問(wèn)題引入:

市場(chǎng)上存在非常多的日志框架。每一種日志框架都有自己?jiǎn)为?dú)的API,要使用對(duì)應(yīng)的框架就要使用其對(duì)應(yīng)的API,這就大大的增加應(yīng)用程序代碼對(duì)于日志框架的耦合性。

解決思路:

為了解決上述問(wèn)題,就在日志框架和應(yīng)用程序之間架設(shè)一個(gè)溝通的橋梁,對(duì)于應(yīng)用程序來(lái)說(shuō),無(wú)論底層的日志框架如何變,都不需要有任何感知。只要門(mén)面服務(wù)做的足夠好,隨意換另外一個(gè)日志框架,應(yīng)用程序不需要修改任意一行代碼,就可以直接上線。

在軟件開(kāi)發(fā)領(lǐng)域有這樣一句話:計(jì)算機(jī)科學(xué)領(lǐng)域的任何問(wèn)題都可以通過(guò)增加一個(gè)間接的中間層來(lái)解決。而門(mén)面模式就是對(duì)于這句話的典型實(shí)踐。

Logback文檔免費(fèi)。Logback的所有文檔是全面免費(fèi)提供的,不象Log4J那樣只提供部分免費(fèi)文檔而需要用戶去購(gòu)買付費(fèi)文檔。Logback擁有更好的性能。

因?yàn)閟pringboot底層使用的是 SLF4j + Logback,而且平時(shí)開(kāi)發(fā)中使用頻率最高的也是此組合,所以選擇使用此組合進(jìn)行日志框架的整合。

可能出現(xiàn)的問(wèn)題:

如果我們直接暴力的排除其他日志框架,可能導(dǎo)致第三方庫(kù)在調(diào)用日志接口時(shí)拋出 ClassNotFound 異常,這里就需要用到中間轉(zhuǎn)換包。

中間轉(zhuǎn)換包說(shuō)白了就是一種偷天換日的解決方案。比如 log4j-over-slf4j ,即 log4j -> slf4j 的轉(zhuǎn)換包,這個(gè)庫(kù)定義了與 log4j一致的接口(包名、類名、方法簽名均一致),但是接口的實(shí)現(xiàn)卻是對(duì) slf4j 日志接口的包裝,即間接調(diào)用了 slf4j 日志接口,實(shí)現(xiàn)了對(duì)日志的轉(zhuǎn)發(fā)。

解決方案:

①:先排除其他日志包

②:在項(xiàng)目中引入 slf4j 的 轉(zhuǎn)換包

③:在項(xiàng)目中引入 slf4j+logback 依賴+ logback的配置文件

在項(xiàng)目中引入 slf4j的 轉(zhuǎn)換包

<!-- https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>log4j-over-slf4j</artifactId><!-- 替換log4j -->
	<version>1.7.25</version>
</dependency>

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId><!-- 替換commons-logging -->
	<version>1.7.25</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jul-to-slf4j</artifactId><!-- 替換java.util.logging -->
	<version>1.7.25</version>
</dependency>

在項(xiàng)目中引入slf4j+logback 依賴

 <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
     <version>1.7.6</version>
    </dependency>
    <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.6</version>
    </dependency>
<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.2.3</version>
 </dependency>

logback.xml配置文件

< ?xml version="1.0" encoding="UTF-8"?>
<configuration>
	  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
		</encoder>
	  </appender>
	  <root level="WARN">
	<appender-ref ref="STDOUT" />
</root>
<!-- 日志:從低到高;只會(huì)打印指定級(jí)別以后的; additivity表示是否將日志信息反饋給root
 DEBUG==》INFO===》WARN===》ERROR
	Additivity:false ,避免重復(fù)打印日志
 -->
 <!-- 在自己的項(xiàng)目在中設(shè)置打印日志的級(jí)別,開(kāi)發(fā)時(shí)使用-->
 <logger name="com.xxx.xxx" level="DEBUG" additivity="false"> 
   <appender-ref ref="STDOUT"/> 
 </logger>
 </configuration>

參考鏈接:

slf4j官網(wǎng)

slf4j使用手冊(cè)

logback官網(wǎng)

Commons Logging官網(wǎng)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis的大于小于號(hào)轉(zhuǎn)義符號(hào)一覽

    mybatis的大于小于號(hào)轉(zhuǎn)義符號(hào)一覽

    這篇文章主要介紹了mybatis的大于小于號(hào)轉(zhuǎn)義符號(hào)一覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java業(yè)務(wù)校驗(yàn)工具實(shí)現(xiàn)方法

    Java業(yè)務(wù)校驗(yàn)工具實(shí)現(xiàn)方法

    這篇文章主要介紹了Java業(yè)務(wù)校驗(yàn)工具實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Mybatis Plus 實(shí)現(xiàn)批量插入的示例代碼

    Mybatis Plus 實(shí)現(xiàn)批量插入的示例代碼

    本文主要介紹了Mybatis Plus 實(shí)現(xiàn)批量插入的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java中的同步與異步詳細(xì)介紹

    Java中的同步與異步詳細(xì)介紹

    這篇文章主要介紹了Java中的同步與異步詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 淺談java中靜態(tài)方法的重寫(xiě)問(wèn)題詳解

    淺談java中靜態(tài)方法的重寫(xiě)問(wèn)題詳解

    本篇文章是對(duì)java中靜態(tài)方法的重寫(xiě)問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • JAVA心得分享---return語(yǔ)句的用法

    JAVA心得分享---return語(yǔ)句的用法

    return算是各大語(yǔ)言的???,基本上都有return語(yǔ)句,那么在JAVA中,return有什么特殊的地方嗎,下面我們來(lái)分析下
    2014-05-05
  • 利用Java手寫(xiě)阻塞隊(duì)列的示例代碼

    利用Java手寫(xiě)阻塞隊(duì)列的示例代碼

    在我們平時(shí)編程的時(shí)候一個(gè)很重要的工具就是容器,在本篇文章當(dāng)中主要給大家介紹阻塞隊(duì)列的原理,并且在了解原理之后自己動(dòng)手實(shí)現(xiàn)一個(gè)低配版的阻塞隊(duì)列,感興趣的可以嘗試一下
    2022-08-08
  • SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    @PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析

    這篇文章主要介紹了@PostConstruct在項(xiàng)目啟動(dòng)時(shí)被執(zhí)行兩次或多次的原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Springboot整合第三方登錄功能的實(shí)現(xiàn)示例

    Springboot整合第三方登錄功能的實(shí)現(xiàn)示例

    本文主要介紹了Springboot整合第三方登錄功能的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論