細說java平台日志組件


1. java.util.logging


JDK自帶日志組件,使用方式簡單,不需要依賴第三方日志組件。
支持將日志打印到控制台,文件,甚至可以將日志通過網絡打印到指定主機。
相對於第三方獨立日志框架來說,支持的日志級別比較少,功能也比較單一。



2. apache commons logging


https://commons.apache.org/proper/commons-logging/index.html
Apache Commons Logging簡稱JCL。
JCL提供了一個輕量級的日志抽象,為應用程序提供統一的日志API。允許用戶使用具體的日志實現,如:log4j,Avalon LogKit,java.util.logging。
當然,JCL同時也提供了一個簡單的日志實現org.apache.commons.logging.impl.SimpleLog,將日志輸出到System.err。
目前JCL已經停止更新了,最新發布版本為1.2 Release - July 2014。



3. log4j


log4j 1.x:    http://logging.apache.org/log4j/1.2/manual.html
log4j 2.x:    https://logging.apache.org/log4j/2.x/
主流日志框架,2.x版本繼續更新,1.x已經停止。建議在應用程序中使用2.x版本。



4. logback


https://logback.qos.ch/
logback是log4j的作者開發一個新的日志組件,原生支持slf4j實現。
官方宣稱logback比log4j小巧,且性能更好,支持更多功能,詳見:https://logback.qos.ch/reasonsToSwitch.html



5. slf4j


https://www.slf4j.org/
slf4j被設計成一個日志框架,為應用程序提供日志API,具體的日志實現可以交給log4j,java.util.logging,logback。
當然,slf4j本身也提供了一個簡單的日志實現Slf4jSimple,但是只能輸出INFO及以上級別的日志到System.err。


總結:
1. apache commons logging組件和slf4j都是日志抽象框架,為應用程序提供統一的日志操作API,支持多種日志實現,如:log4j。但是目前apache commons logging已經停止更新,活躍度並沒有slf4j高,不建議使用。
2. logback作為slf4j的原生實現,所以理論上最佳的日志組件組合是:slf4j + logback。
3. slf4j提供了統一的日志API,將具體的日志實現交給其他日志框架,這帶來了很大的靈活性。

那么問題來了,既然存在這么多的日志框架,那如何選擇呢?

實際上,我們通常會選擇當前主流的框架,比如log4j。當然,logback宣稱比log4j更加高效。
那slf4j在什么場合使用呢?slf4j為其他日志框架提供了統一的日志操作api,這對於sdk這樣的基礎庫開發,非常適合使用slf4j,因為你不知道用戶最終會選擇什么日志框架。
假如不使用slf4j,而是在sdk中使用了log4j,那只能要求sdk的用戶也必須使用log4j,這對於用戶來說是不能忍受的。
而slf4j使用同一的日志操作api,將具體的日志框架選擇權利留給用戶,既可以選擇log4j,也可以選擇logback,甚至可以使用jdk日志組件。
另外,slf4j的日志參數格式化非常方便,在slf4j中可以直接將日志語句寫成:logger.info("hello, {}", "hello world");而在log4j中要實現這個效果必須通過String對象實現:
logger.info(String.format("hello, %s", "hello world"));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM