當前位置:編程學習大全網 - 編程語言 - 了解Java日誌系統框架的設計與實現

了解Java日誌系統框架的設計與實現

 在Java 領域 存在大量的日誌組件 open open收錄了 個日誌組件 日誌系統作為壹種應用程序服務 對於跟蹤調試 程序狀態記錄 崩潰數據恢復都有著重要的作用 我們可以把Java日誌系統看作是必不可少的跟蹤調試工具

  簡介

 日誌系統是壹種不可或缺的跟蹤調試工具 特別是在任何無人職守的後臺程序以及那些沒有跟蹤調試環境的系統中有著廣泛的應用 長期以來 日誌系統作為壹種應用程序服務 對於跟蹤調試 程序狀態記錄 崩潰數據恢復都有非常現實的意義 這種服務通常以兩種方式存在

  日誌系統作為服務進程存在 Windows中的的事件日誌服務就屬於這種類型 該類型的日誌系統通常通過消息隊列機制將所需要記錄的日誌由日誌發送端發送給日誌服務 日誌發送端和日誌保存端通常不在同壹進程當中 日誌的發送是異步過程 這種日誌服務通常用於管理員監控各種系統服務的狀態

  日誌系統作為系統調用存在 Java世界中的日誌系統和Unix環境下諸多守護進程所使用的日誌系統都屬於這種類型 日誌系統的代碼作為系統調用被編譯進日誌發送端 日誌系統的運行和業務代碼的運行在同壹進程空間 日誌的發送多數屬於同步過程 這種日誌服務由於能夠同步反映處系統運行狀態 通常用於調試跟蹤和崩潰恢復

 本文建立的日誌系統基本屬於第二種類型 但又有所不同 該日誌系統將利用Java線程技術實現壹個既能夠反映統壹線程空間中程序運行狀態的同步日誌發送過程 又能夠提供快速的日誌記錄服務 還能夠提供靈活的日誌格式配置和過濾機制

  系統調試的誤區

 在控制臺環境上調試Java程序時 此時往控制臺或者文本文件輸出壹段文字是查看程序運行狀態最簡單的做法 但這種方式並不能解決全部的問題 有時候 對於壹個我們無法實時查看系統輸出的系統或者壹個確實需要保留我們輸出信息的系統 良好的日誌系統顯得相當必要 因此 不能隨意的輸出各種不規範的調試信息 這些隨意輸出的信息是不可控的 難以清除 可能為後臺監控 錯誤排除和錯誤恢復帶來相當大的阻力

  日誌系統框架的基本功能

 壹個完備的日誌系統框架通常應當包括如下基本特性

 所輸出的日誌擁有自己的分類 這樣在調試時便於針對不同系統的不同模塊進行查詢 從而快速定位到發生日誌事件的代碼

 日誌按照某種標準分成不同級別 分級以後的日誌 可以用於同壹分類下的日誌篩選

 支持多線程 日誌系統通常會在多線程環境中使用 特別是在Java系統當中 因此作為壹種系統資源 日誌系統應當保證是線程安全的

 支持不同的記錄媒介 不同的工程項目往往對日誌系統的記錄媒介要求不同 因此日誌系統必須提供必要的開發接口 以保證能夠比較容易的更換記錄介質

 高性能 日誌系統通常要提供高速的日誌記錄功能以應對大系統下大請求流量下系統的正常運轉

 穩定性 日誌系統必須是保持高度的穩定性 不能因為日誌系統內部錯誤導致主要業務代碼的崩潰

  常用日誌系統簡介

 在Java世界中 以下三種日誌框架比較優秀

  )Log J

 最早的Java日誌框架之壹 由Apache基金會發起 提供靈活而強大的日誌記錄機制 但是其復雜的配置過程和內部概念往往令使用者望而卻步

  )JDK LoggingFramework

 繼Log J之後 JDK標準委員會將Log J的基本思想吸收到JDK當中 在JDK 中發布了第壹個日誌框架接口 並提供了壹個簡單實現

  )CommonsLoggingFramwork

 該框架同樣是Apache基金會項目 其出現主要是為了使得Java項目能夠在Log J和JDK lLoggingFramework的使用上隨意進行切換 因此該框架提供了統壹的調用接口和配置方法

  系統設計

 由於Log J得到廣泛應用 從使用者的角度考慮 本文所設計的框架 采用了部分Log J的接口和概念 但內部實現則完全不同 使用Java實現日誌框架 關鍵的技術在於前面提及的日誌框架特性的內部實現 特別是 日誌的分類和級別 日誌分發框架的設計 日誌記錄器的設計以及在設計中的高性能和高穩定性的考慮

  系統架構

 日誌系統框架可以分為日誌記錄模塊和日誌輸出模塊兩大部分 日誌記錄模塊負責創建和管理日誌記錄器(Logger) 每壹個Logger對象負責按照不同的級別(LoggerLevel)接收各種記錄了日誌信息的日誌對象(LogItem) Logger對象首先獲取所有需要記錄的日誌 並且同步地將日誌分派給日誌輸出模塊 日誌輸出模塊則負責日誌輸出器(Appender)的創建和管理 以及日誌的輸出 系統中允許有多個不同的日誌輸出器 日誌輸出器負責將日誌記錄到存儲介質當中 系統結構如下圖 所示

  • 上一篇:姓中的車怎麽讀(車姓或居怎麽讀)
  • 下一篇:CAD怎麽把圖形導入到CDR?CAD把圖形導入Coreldraw的教程
  • copyright 2024編程學習大全網