1. 程式人生 > >Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比較

Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比較

 之前就知道有好幾種日誌框架,但是一直都是聽別人講,在什麼時候該用何種logger,哪種logger比較好……一直對Log4j、Jakarta Commons-Logging、java.util.logging、SLF4J、Logback它們之間的區別已經各自的優勢不是很瞭解,這個週末決定沉下心來好好研究一下。一下這篇文章,就是我在對比了這幾種日誌框架之後的一些收穫,希望能給大家帶來一點收穫。

  • Log4j

     Log4j = Log for Java.
     author: Ceki Gülcü
     license: Apache License V2.0
     Log4j是

Apache的一個開放原始碼專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、資料庫等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。
     Log4j有7種不同的log級別,按照等級從低到高依次為:TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF。如果配置為OFF級別,表示關閉log。    
     Log4j支援兩種格式的配置檔案:properties和xml。包含三個主要的元件:Logger、appender、Layout。    
Example for log4j 1.2     

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
  <!--an appender is an output destination, such as the console or a file; names of appenders are arbitrarily chosen
-->
  <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
    </layout>
  </appender>

  <!--loggers of category 'org.springframework' will only log messages of level "info" or higher; if you retrieve Loggers by using the class name (e.g. Logger.getLogger(AClass.class)) and if AClass is part of the org.springframework package, it will belong to this category-->
  <logger name="org.springframework">
    <level value="info"/>
  </logger>

  <!--everything of spring was set to "info" but for class PropertyEditorRegistrySupport we want "debug" logging-->
  <logger name="org.springframework.beans.PropertyEditorRegistrySupport">
    <level value="debug"/>
  </logger>
  
  <
root>
  <!--all log messages of level "debug" or higher will be logged, unless defined otherwise all log messages will be logged to the appender "stdout", unless defined otherwise-->
    <level value="debug" />
    <appender-ref ref="stdout" />
  </root>

</
log4j:configuration>
複製程式碼
  • SLF4J

     SLF4J = Simple Logging Facade for Java.
     author: Ceki Gülcü
     SLF4J,即簡單日誌門面(Simple Logging Facade for Java),不是具體的日誌解決方案,而是通過Facade Pattern提供一些Java logging API,它只服務於各種各樣的日誌系統。按照官方的說法,SLF4J是一個用於日誌系統的簡單Facade,允許終端使用者在部署其應用時使用其所希望的日誌系統。作者建立SLF4J的目的是為了替代Jakarta Commons-Logging。
     實際上,SLF4J所提供的核心API是一些介面以及一個LoggerFactory的工廠類。在使用SLF4J的時候,不需要在程式碼中或配置檔案中指定你打算使用那個具體的日誌系統。SLF4J提供了統一的記錄日誌的介面,只要按照其提供的方法記錄即可,最終日誌的格式、記錄級別、輸出方式等通過具體日誌系統的配置來實現,因此可以在應用中靈活切換日誌系統。
     那麼什麼時候使用SLF4J比較合適呢?
     如果你開發的是類庫或者嵌入式元件,那麼就應該考慮採用SLF4J,因為不可能影響終端使用者選擇哪種日誌系統。在另一方面,如果是一個簡單或者獨立的應用,確定只有一種日誌系統,那麼就沒有使用SLF4J的必要。假設你打算將你使用log4j的產品賣給要求使用JDK 1.4 Logging的使用者時,面對成千上萬的log4j呼叫的修改,相信這絕對不是一件輕鬆的事情。但是如果開始便使用SLF4J,那麼這種轉換將是非常輕鬆的事情。

  • Logback

      author: Ceki Gülcü
     licences:EPL v1.0 and LGPL 2.1
Logback,一個“可靠、通用、快速而又靈活的Java日誌框架”。logback當前分成三個模組:logback-core,logback- classic和logback-access。logback-core是其它兩個模組的基礎模組。logback-classic是log4j的一個改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模組與Servlet容器整合提供通過Http來訪問日誌的功能。

     1. logback-core: Joran, Status, context, pattern parsing
     2. logback-classic: developer logging
     3. logback-access: The log generated when a user accesses a web-page on a web server. Integrates seamlessly with Jetty and Tomcat.
選擇logback的理由:(http://logback.qos.ch/reasonsToSwitch.html#fasterImpl )
     1. logback比log4j要快大約10倍,而且消耗更少的記憶體。
     2. logback-classic模組直接實現了SLF4J的介面,所以我們遷移到logback幾乎是零開銷的。
     3. logback不僅支援xml格式的配置檔案,還支援groovy格式的配置檔案。相比之下,Groovy風格的配置檔案更加直觀,簡潔。
     4. logback-classic能夠檢測到配置檔案的更新,並且自動重新載入配置檔案。
     5. logback能夠優雅的從I/O異常中恢復,從而我們不用重新啟動應用程式來恢復logger。
     6. logback能夠根據配置檔案中設定的上限值,自動刪除舊的日誌檔案。
     7. logback能夠自動壓縮日誌檔案。
     8. logback能夠在配置檔案中加入條件判斷(if-then-else)。可以避免不同的開發環境(dev、test、uat...)的配置檔案的重複。
     9. logback帶來更多的filter。
     10. logback的stack trace中會包含詳細的包資訊。
     11. logback-access和Jetty、Tomcat整合提供了功能強大的HTTP-access日誌。
     配置檔案:需要在專案的src目錄下建立一個logback.xml。注:(1)logback首先會試著查詢logback.groovy檔案;(2)當沒有找到時,繼續試著查詢logback-test.xml檔案;(3)當沒有找到時,繼續試著查詢logback.xml檔案;(4)如果仍然沒有找到,則使用預設配置(列印到控制檯)。 詳細的配置在http://aub.iteye.com/blog/1101222這片部落格中解釋的非常清楚。在這裡感謝一下原作者(^_^)。

  • JUL

     JUL = java.util.logging.

     Java提供了自己的日誌框架,類似於Log4J,但是API並不完善,對開發者不是很友好,而且對於日誌的級別分類也不是很清晰,比如:SEVEREWARNINGINFOCONFIGFINE,FINERFINEST。所以不推薦使用這種方式輸出日誌。
JCL
     JCL = Jakarta Commons-Logging.
Jakarta Commons Logging和SLF4J非常類似,也是提供的一套API來掩蓋了真正的Logger實現。便於不同的Logger的實現的替換,而不需要重新編譯程式碼。缺點在於它的查詢Logger的實現者的演算法比較複雜,而且當出現了一些class loader之類的異常時,無法去修復它。

  • Log4j 2

     已經有很多其他的日誌框架對Log4j進行了改良,比如說SLF4J、Logback等。而且Log4j 2在各個方面都與Logback非常相似,那麼為什麼我們還需要Log4j 2呢?
  1. 外掛式結構。Log4j 2支援外掛式結構。我們可以根據自己的需要自行擴充套件Log4j 2. 我們可以實現自己的appender、logger、filter。
  2. 配置檔案優化。在配置檔案中可以引用屬性,還可以直接替代或傳遞到元件。而且支援json格式的配置檔案。不像其他的日誌框架,它在重新配置的時候不會丟失之前的日誌檔案。
  3. Java 5的併發性。Log4j 2利用Java 5中的併發特性支援,儘可能地執行最低層次的加鎖。解決了在log4j 1.x中存留的死鎖的問題。如果你的程式仍然在飽受記憶體洩露的折磨,請毫不猶豫地試一下log4j 2吧。
  4. 非同步logger。Log4j 2是基於LMAX Disruptor庫的。在多執行緒的場景下,和已有的日誌框架相比,非同步的logger擁有10左右的效率提升。
     還有更多的新特性,在這裡就不一一贅述了。瞭解更多請移步到:http://logging.apache.org/log4j/2.x/manual/index.html

相關推薦

Log4jLog4j 2JULJCL SFL4J Logback 與 Lombok 的使用

Log4J Log4j = Log for Java. Log4j是Apache的一個開放原始碼專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、資料庫等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生

Log4jLog4j 2LogbackSFL4JJULJCL比較

 之前就知道有好幾種日誌框架,但是一直都是聽別人講,在什麼時候該用何種logger,哪種logger比較好……一直對Log4j、Jakarta Commons-Logging、java.util.logging、SLF4J、Logback它們之間的區別已經各自的優勢不是很瞭解,這個週末決定沉下心來好好研究

logbacklog4jlog4j2三種日誌框架效能檢測——為什麼用log4j2。

注意:此部落格為轉載 https://blog.csdn.net/yjh1271845364/article/details/70888262 作為記錄 日誌已經成為系統開發中不可或缺的一部分. 但是針對logback, log4j和log4j2. 究竟改如何選擇? 到底效能

slf4japache common logginglog4jlogback關係比較

一、Log4j Log4j是一個Java日誌框架,使用Log4j可以對日誌等級、日誌輸出地(檔案或網路等)、日誌輸出格式各方面作出有效的管理。 Log4j的結構並不複雜,主要使用了策略模式。 每個Logger有多個Appender,Appender決定寫日誌的策略。

commons-logging的使用簡介Java的那些日誌---commons-loging log4j slf4j LogBack 的理解與區分

簡介: Jakarta  Commons-logging(JCL)是apache最早提供的日誌的門面介面。提供簡單的日誌實現以及日誌解耦功能。         JCL能夠選擇使用Log4j(或其他如slf4j等)還是JDK Logging,但是他不依賴Log4

Log4j2Log4jLogback自定義Appender實現

logback: <!--異常收集 --> <appender name="gwarn"class="com.duowan.gwarn.sdk.GwarnLogbackAppender">          <filterclass="ch.qos.logback.classi

JCLSLF4JLog4JLog4J2LogBackJUL之間的關係,你搞清楚了嗎?

寫在前面 日誌元件是我們平時開發過程中必然會用到的元件。在系統中正確的列印日誌至少有下面的這些好處: 除錯:在程式的開發過程中,必然需要我們不斷的除錯以達到程式能正確執行的狀態 。記錄日誌可以讓開發人員清楚的瞭解程式的執行狀態定位問題; 資訊收集:在DT時代,誰掌握了資料誰就掌握了主動權。現在主流的日誌系統

Java中的日誌——Java.util.logginglog4jcommons-logging

mark svg pen xtra pat sstream ogg package ice Java中給項目程序添加log主要有三種方式,一使用JDK中的java.util.logging包,一種是log4j,一種是commons-logging。其中log4j和co

Java進階學習第十四天(泛型反射泛型註解Log4J日誌元件)

一、泛型 1、概述 泛型是JDK1.5以後才有的,可以在編譯時期進行型別檢查,且可以避免頻繁型別轉化! // 執行時期異常 @Test public void testGeneric() throws Exception { // 集合的宣告 List list

maven中配置slf4j-log4jlog4j實現包

maven中配置slf4j-log4j、log4j實現包 java中很多開源元件pom.xml中都內建引入了slf4j的日誌jar包,如quartz-2.3.jar的pom依賴中就有slf4j-api-1.7.7.jar slf4j,提起來大家可能不太熟悉,但若說起它的一個實現log4j 大家可

slf4j-apislf4j-log4j12log4j的關係

在網上找到一篇關於這三個jar包的關係的部落格,講的很好,所以就轉載了: https://blog.csdn.net/tengdazhang770960436/article/details/18006127 詳細內容如下: ---------------------------------------

Log4j基本使用方法

轉自:https://blog.csdn.net/luohai859/article/details/52250807 Log4j由三個重要的元件構成:日誌資訊的優先順序,日誌資訊的輸出目的地,日誌資訊的輸出格式。日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌

slf4j-apislf4j-log4j12log4j以及Dom4j之間什麼關係?

1.dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,Hibernate用它來讀寫配置檔案dom4j需要匯入dom4j-full.

Xcode7 運行iOS10以上系統(10.110.210.3)解決Could not find Developer Disk Image

ges 添加 -1 eve device images 真機 文件 eight 由於歷史原因,需要在Xcode7上真機運行下app,無奈手機系統已是10.3了,一運行, 就提示:Could not find Developer Disk Image 解決辦法: 1、找

表單提交 防註入XSS 1入庫時轉義後臺 2出庫轉義前臺

his 驗證 替換字符 插入 如果 不同的 js代碼 urn ida 第一種 入庫過濾js自動填充時過濾js代碼class GoodsModel extends Model{ // 填充 protected $_auto = [ // 自己補充填充

ARM指令集Thumb指令集Thumb-2指令集

32bit image 存儲 wid mage 頻率 arm 16bit 承載 MCU使用什麽指令集主要由內核決定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 編代碼全部是 32bits 的,每條指令能承載更多的信息,因此使用最少的指令完

[3140] Sublime Text 2.x, 3.x 通用註冊碼密鑰集合

cbc 所有 包括 mmu pre 2.x cad 字符串 lar [3140] Sublime Text 2.x, 3.x Universal License Keys collection for Win, Mac & Lin 所有這些許可證密鑰都被測

正則驗證 只能輸入中文數字字母 2-10個字符之間

正則驗證 只能輸入中文、數字、字母 2-10個字符之間var reg = /([u4e00-u9fa5\dA-Za-z]){2,10}/; //這個表達式有一些特殊字符 比如@ 是可以驗證通過的實際操作後發現下面正則表達式普通字母、數字已經隱含了不包括特殊符號所以下面包含普通字母、數字的正則表達是

201671010138 2016-2017-2《Java程序設計》第一第二章學習心得

意義 很大的 工具包 認識 它的 java開發 bsp 目的 運行環境 JAVA在沒接觸這本書之前,所有的認識大概都停留在c語言的層面,對我們的意義只不過是另一種編程。但看到書的厚度,突然覺得如臨大敵,迎面而來的是更多專業術語,另外一個不同的編程環境。嗯

免費SSL證書(支持1.01.11.2

logs 免費 設置 重啟 cloud 下載 需要 微信小程序 .html 由於公司要開發微信小程序,而微信小程序的接口需要https協議的,並且要支持TLS1.0、TLS1.1、TLS1.2。如果僅僅是為了開發小程序,安全等級又不用太高,可以選擇免費的SSL證書 在這裏選