標籤:導致 out 領域 記錄 log lock 根據 相關 錯誤資訊
概述
對於現代的 Java 應用程式來說,只要被部署到真實的生產環境,其日誌的重要性就是不言而喻的,很難想象沒有任何日誌記錄功能的應用程式被運行於生產環境中。日誌 API 所能提供的功能是多種多樣的,包括記錄程式運行時產生的錯誤資訊、狀態資訊、調試資訊和執行時間資訊等。在生產環境中,日誌是尋找問題來源的重要依據,應用程式運行時的產生的各種重要訊息,都應該通過日誌 API 來進行記錄。
很多Java開發人員習慣於使用 System.out.println、System.err.println 以及異常對象的 printStrackTrace 方法來輸出相關資訊。這些使用方式雖然簡便,但是所產生的資訊量比較少,而且也沒有被長久儲存下來,在應用出現問題需要尋找原因時,這些方式並不能提供有效協助。這些方式都不應該出現在正式的生產環境代碼中,而是應該改為使用 Java 日誌架構。使用日誌架構並沒有增加很多複雜度,但是所提供的好處是顯著的。
架構
記錄日誌是 Java 應用開發中必不可少的功能特性,在 JDK 的早期版本中並不包含日誌記錄相關的 API 和實現。從 JDK 1.4 開始,SUN 官方在 java.util.logging 包中開始引入了 Java Logging API,在本系列教程中一律簡稱為 logjdk。此外,Java 社區也開發和貢獻了很多開源、優秀的日誌 API 和實現。其中比較優秀的有 Log4j、Logback、Log4J2、Apache Commons Logging(ACL) 和 SLF4J等等。
無論是 JDK 中提供的 logjdk 架構,還是其他第三方提供的 Log4j、ACL 等架構,它們的目的都是為了滿足在 Java 應用中可以便利地和清晰地記錄日誌資訊的功能性需求。但是,這些架構在設計思路與理念在還是存在著巨大的差異,這也直接導致了它們在 Java 領域的市場份額的差異。此外,按照它們所處的層次差異與功能差異,可以將這些熱門的日誌架構分成兩個派系:
* Java 日誌實現架構:比如 logjdk、Log4j、Logback、Log4j2
* Java 日誌封裝架構:比如 ACL、SLF4J、Log4j2
Log4j2 比較特殊,既是一個實現架構,又是一個封裝架構。
針對在 Java 應用中進行日誌資訊記錄的這個常見性需求,JDK 平台和第三方卻提供了這麼多優秀的架構和選擇。對於 Java 的新手而言,如何選擇適合當前項目的日誌架構顯然是一個不可不解決的問題。筆者作為過來人,決定竭盡全力,在博採眾家之所長的情況下,為各位讀者朋友寫一個 Java 日誌架構相關的終極教程。考慮到各個架構的流程度和功能特性,本教程將優先講解如下列出的這些架構,後期根據實際情況可能會有調整。
java.util.logging(logjdk)
- 深入分析Java的內建日誌API(java.util.logging)(一)
- 深入分析Java的內建日誌API(java.util.logging)(二)
- 深入分析Java的內建日誌API(java.util.logging)(三)
- 深入分析Java的內建日誌API(java.util.logging)(四)
log4jlogbackApache Commons Logging(ACL)SFL4JLog4j2總結
日誌記錄對於任意一個 Java 應用而言都是必不可少的功能性需求,但是由於曆史原因,Java 領域出現了多種有優秀的日誌架構,Java 新手面對這樣的局面往往會感到迷茫。筆者作為過來人,希望在博採眾長的基礎上,寫出一篇 Java 日誌架構的終極教程,協助讀者朋友輕鬆掌握關於 Java 日誌記錄的所有知識點和技能。
Java 日誌架構終極教程