學習如何用自己的 appender 來擴展 log4j 框架
級別:高級
Ruth Zamorano (ruth.zamorano@orange-soft.com),軟件架構師,Orange Soft
Rafael Luque (rafael.luque@orange-soft.com), CTO,Orange Soft
2003年 9 月
日志記錄不僅是開發和測試周期中的一個重要元素——提供要害調試信息,而且對于系統已部署到生產環境之后調試錯誤也是很有用的——提供修復錯誤所需的準確上下文信息。在本文中,Orange Soft 公司(這是一家專業從事面向對象技術、服務器端java 平臺和 Web 可訪問性的西班牙公司)的共同創辦人 Ruth Zamorano 和 Rafael Luque 闡述了如何利用 log4j 的擴展能力,使得分布式 Java 應用程序能夠通過即時消息傳送(instant messaging,IM)來監視。
不管您編寫多少設計良好的測試用例,即使是最小的應用程序也會在部署到生產環境之后隱藏著一個或多個錯誤。雖然測試驅動的開發和 QA 手段可以提高代碼質量 并增強對應用程序的信心,但是當某個系統失敗時,開發人員和系統治理員需要了解系統的相關執行上下文信息。有了適當的信息,他們就能確定問題的本質并快速解決問題,從而節省時間和金錢。
監視分布式應用程序要求能夠對遠程資源進行日志記錄——通常是一臺中心日志服務器或者系統治理員的計算機。log4j 環境提供一組適用于遠程日志記錄的 appender,比如 SocketAppender、JMSAppender 和 SMTPAppender。在本文中,我們將向您展示一種新的遠程類(remote-class)appender:IMAppender。
讓我們首先簡要回顧一下 log4j ,然后再深入研究 appender。自然地,理解 appender 的最好方式就是試著編寫一個 appender,因此我們將在最后一節實現一個例子 IM(即時消息傳送)appender,以說明 AppenderSkeleton 類的工作原理。
讀者應該熟悉 log4j 框架。關于 log4j 的更多信息,請參見本文后面的 參考資料 。
log4j 概述
log4j 框架是用 Java 語言編寫的事實上的標準日志記錄框架。作為 Jakarta 項目的一部分,它在 Apache 軟件許可證(Apache Software License)下分發,Apache 軟件許可證是由開放源代碼促進會(Open Source Initiative ,OSI)認證的一種流行的開放源代碼許可證。log4j 環境是完全可配置的,或者通過編程方式完成,或者通過屬性中的配置文件或者 xml 格式的配置文件完成。此外,它還答應開發人員無需修改源代碼就可以選擇性地篩選出日志記錄請求。
log4j 環境包括三個主要組件:
ALL、DEBUG、INFO、WARN、ERROR, FATA或OFF。理解 appender
log4j 框架答應向任何日志記錄器附加多個 appender??梢栽谌魏螘r候對某個日子記錄器添加(或刪除)appender。附隨 log4j 分發的 appender 有多個,包括:
ConsoleAppender FileAppender SMTPAppender JDBCAppender JMSAppender NTEventLogAppender SyslogAppender也可以創建自己的自定義 appender。
log4j 最主要的特性之一就是它的靈活性。遺憾的是,沒有多少現存文檔說明了如何編寫自己的 appender。學習編寫 appender 的方式之一就是分析可用的源代碼,然后嘗試推斷 appender 是如何工作的——本文將幫助 您完成這個任務。
揭開面紗
所有的 appender 都必須擴展 org.apache.log4j.AppenderSkeleton 類,這是一個抽象類,它實現了 org.apache.log4j.Appender 和 org.apache.log4j.spi.OptionHandler 接口。AppenderSkeleton 類的 UML 類圖看起來如圖1所示:
圖 1. AppenderSkeleton 的 UML 類圖
新聞熱點
疑難解答