91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java日志框架的用法及問題解析

發布時間:2020-10-28 16:52:39 來源:億速云 閱讀:180 作者:Leah 欄目:開發技術

Java日志框架的用法及問題解析?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

日志定義:

在計算機領域,日志文件(logfile)是一個記錄了發生在運行中的操作系統或其他軟件中的事件的文件,或者記錄了在網絡聊天軟件的用戶之間發送的消息。

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

日志級別優先級:

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

日志框架的作用:

①:跟蹤用戶對系統訪問,記錄了系統行為的時間、地點、狀態等相關信息,能夠幫助我們了解并監控系統狀態

②:進行統計

③:進行Debug,在系統產生問題時,能夠幫助我們快速的定位、診斷并解決問題。

在發生錯誤或者接近某種危險狀態時能夠及時提醒我們處理

常用的日志框架類別簡介:

  • Log4j Apache Log4j是一個基于Java的日志記錄工具。它是由Ceki Gülcü首創的,現在則是Apache軟件基金會的一個項目。 Log4j是幾種Java日志框架之一。
  • Log4j 2 Apache Log4j 2是apache開發的一款Log4j的升級產品,Log4j被apache收購,升級,改為log4j2,框架改動很大,只是借用之名。
  • JCL (Jakarta Commons Logging) Apache基金會所屬的項目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名為Commons Logging。
  • Slf4j(Simple Logging Facade for Java) 類似于Commons Logging,是一套簡易Java日志門面,本身并無日志的實現。
  • Logback 一套日志組件的實現(slf4j陣營)。
  • JUL (Java Util Logging),自Java1.4以來的官方日志實現,已被淘汰。
  • jboss-logging 等。

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

Mybatis框架中使用的是 Log4j

Hibernate框架中使用的是 jboss-logging

Springboot底層使用的是 SLF4j + Logback

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

問題引入:

市場上存在非常多的日志框架。每一種日志框架都有自己單獨的API,要使用對應的框架就要使用其對應的API,這就大大的增加應用程序代碼對于日志框架的耦合性。

解決思路:

為了解決上述問題,就在日志框架和應用程序之間架設一個溝通的橋梁,對于應用程序來說,無論底層的日志框架如何變,都不需要有任何感知。只要門面服務做的足夠好,隨意換另外一個日志框架,應用程序不需要修改任意一行代碼,就可以直接上線。

在軟件開發領域有這樣一句話:計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決。而門面模式就是對于這句話的典型實踐。

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

因為springboot底層使用的是 SLF4j + Logback,而且平時開發中使用頻率最高的也是此組合,所以選擇使用此組合進行日志框架的整合。

可能出現的問題:

如果我們直接暴力的排除其他日志框架,可能導致第三方庫在調用日志接口時拋出 ClassNotFound 異常,這里就需要用到中間轉換包。

中間轉換包說白了就是一種偷天換日的解決方案。比如 log4j-over-slf4j ,即 log4j -> slf4j 的轉換包,這個庫定義了與 log4j一致的接口(包名、類名、方法簽名均一致),但是接口的實現卻是對 slf4j 日志接口的包裝,即間接調用了 slf4j 日志接口,實現了對日志的轉發。

解決方案:

①:先排除其他日志包

②:在項目中引入 slf4j 的 轉換包

③:在項目中引入 slf4j+logback 依賴+ logback的配置文件

在項目中引入 slf4j的 轉換包

<!-- 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>

在項目中引入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配置文件

< &#63;xml version="1.0" encoding="UTF-8"&#63;>
<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>
<!-- 日志:從低到高;只會打印指定級別以后的; additivity表示是否將日志信息反饋給root
 DEBUG==》INFO===》WARN===》ERROR
	Additivity:false ,避免重復打印日志
 -->
 <!-- 在自己的項目在中設置打印日志的級別,開發時使用-->
 <logger name="com.xxx.xxx" level="DEBUG" additivity="false"> 
   <appender-ref ref="STDOUT"/> 
 </logger>
 </configuration>

看完上述內容,你們掌握Java日志框架的用法及問題解析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深水埗区| 嵩明县| 水城县| 银川市| 界首市| 琼海市| 红原县| 南川市| 湖州市| 仲巴县| 五大连池市| 钟山县| 金湖县| 陕西省| 铁岭县| 通城县| 阳原县| 武川县| 丰县| 合肥市| 玉溪市| 赤城县| 郓城县| 安岳县| 出国| 金乡县| 安国市| 南昌市| 临夏市| 蛟河市| 萝北县| 滦南县| 大荔县| 娱乐| 卓资县| 红安县| 靖州| 古浪县| 信阳市| 沁水县| 滦平县|