ADFLogger記錄日誌和調試ADF業務組件

來源:互聯網
上載者:User

一、基本知識

 

下面一段是摘自域於java.util.logging JDK說明文檔中關於使用日誌的四個主要目標:

  1. 由終端使用者和系統管理員進行問題診斷。這由簡單的常見問題日誌組成,可在本地解決或跟蹤這些問題,如資源不足、安全失敗和簡單的配置錯誤。
  2. 由現場服務工程師進行問題診斷。現場服務工程師使用的日誌資訊可以相當複雜和冗長,遠超過系統管理員的要求。通常,這樣的資訊需要特定子系統中的額外日誌記錄。
  3. 由開發組織進行問題診斷。在現場出現問題時,必須將捕獲的日誌資訊返回到原Team Dev以供診斷。此日誌資訊可能非常詳細,並且相當費解。這樣的資訊可能包括對特定子系統進行內部執行的詳細跟蹤。
  4. 由開發人員進行問題診斷。Logging API 還可以用來協助調試正在開發的應用程式。這可能包括由目標應用程式產生的日誌資訊,以及由低層級的庫產生的日誌資訊。但是要注意,雖然這樣使用非常合理,但是 Logging API 並不用於代替開發環境中已經存在的調試和解析工具

本文主要基於第四點來描述如何利用JDeveloper 11g和ADFLogger來調試ADF應用中的業務組件。ADFLogger是ADF基於Java Logging API (java.util.logging.Logger)封裝的日誌工具。

 

java.util.logging.Level類中定義了一組可用來控制日誌輸出的標準記錄層級。日誌 Level 對象是有序的,並且是通過有序的整數來指定。

在給定的層級上啟用日誌記錄也就啟用了所有較進階別的日誌記錄,如下面的層級中,如果啟用了INFO層級,那更進階別的SEVERE和WARNING也被啟用了。

 

日誌按嚴重性由高到低的順序提供了如下的層級

  1. SEVERE 嚴重的錯誤,導致系統中止。期望這類資訊能立即顯示在狀態控制台上
  2. WARNING 潛在問題的層級,它是不符合預期的狀態但還不至於成為“錯誤”,例如使用了廢棄的API等等。期望這類資訊能立即顯示在狀態控制台上
  3. INFO 運行時產生的有意義的一些資訊,主要用於報告訊息的目的。期望這類資訊能立即顯示在狀態控制台上
  4. CONFIG 靜態配置訊息,用來輸出一些系統配置資訊。期望這類資訊僅被寫入記錄檔中
  5. FINE 指示提供跟蹤資訊,簡單輸出一些跟蹤資訊。期望這類資訊僅被寫入記錄檔中
  6. FINER 指示提供一條相當詳細的跟蹤訊息。期望這類資訊僅被寫入記錄檔中
  7. FINEST 指示提供一條最詳細的跟蹤訊息。期望這類資訊僅被寫入記錄檔中

二、編寫代碼

 

在ADF代碼中根據需求記錄日誌資訊,確保日誌資訊在內容上和反應問題的嚴重程度上的準確而且恰當,是程式員需要做好的重要任務。

如下是在一個EO的實作類別AfwkModulesVlEOImpl中記錄日誌資訊的代碼:

首先是建立一個日誌記錄器;然後輸出日誌資訊。

 

private static ADFLogger logger = ADFLogger.createADFLogger(AfwkModulesVlEOImpl.class);<br />logger.log(Level.INFO, "select language_code, installed_flag from afwk_languages where installed_flag in ('I', 'B')");<br />//logger.info("select language_code, installed_flag from afwk_languages where installed_flag in ('I', 'B')");

代碼中記錄日誌資訊可以採取兩種辦法:

  1. 使用log方法,通過指定Level參數來決定日誌資訊反映為哪個層級的嚴重程度。如上面代碼中logger.log方法
  2. 使用記錄層級的方法,什麼嚴重程度的層級就使用什麼樣的輸出方法。如上面代碼中被注釋掉的logger.info方法就是用來輸出INFO層級的日誌資訊

日誌記錄方法劃分為 5 個主要類別:

  1. 一系列的 "log" 方法,這種方法帶有記錄層級、訊息字串,以及可選的一些訊息字串參數。
  2. 一系列的 "logp" 方法(即 "log precise"),其與 "log" 方法相似,但是帶有顯式的源類名稱和方法名稱。
  3. 一系列的 "logrb" 方法(即 "log with resource bundle"),其與 "logp" 方法相似,但是帶有顯式的在本地化日誌訊息中使用的資源套件名稱。
  4. 還有跟蹤方法條目("entering" 方法)、方法返回("exiting" 方法)和拋出異常("throwing" 方法)的便捷方法。
  5. 最後,還有一系列在非常簡單的情況下(如開發人員只想為給定的記錄層級記錄一條簡單的字串)使用的便捷方法。這些方法按標準層級名稱命名("severe"、"warning"、"info" 等等),並帶有單個參數,即一個訊息字串。

如severe層級的方法有如下:

  1. severe(java.lang.String msg)
  2. severe(java.lang.String message, java.lang.Object param)
  3. severe(java.lang.String message, java.lang.Object[] params)
  4. severe(java.lang.String sourceClass, java.lang.String sourceMethod, java.lang.String msg)
  5. severe(java.lang.String sourceClass, java.lang.String sourceMethod, java.lang.String msg, java.lang.Object param1)
  6. severe(java.lang.String sourceClass, java.lang.String sourceMethod, java.lang.String msg, java.lang.Object[] params)
  7. severe(java.lang.String message, java.lang.Throwable t)
  8. severe(java.lang.Throwable t)

其它的方法和方法的詳細資料可以查看Java Doc

 

 

三、偵錯工具

 

通過應用模組(Application Module)的操作功能表選擇Run或者Debug來測試回合業務組件,並根據實際組件進行資料操作:

 

 

操作之後查看Log Window的輸出資訊:

 

注意中輸出的日誌資訊:

1,綠色的日誌資訊屬於系統運行輸出的

2,紅色字型的日誌資訊則是在程式碼中記錄的。而紅色的日誌中,帶日期時間、包名和方法的那行是我們程式中輸出日誌所屬的上下文資訊,

而以“資訊:”打頭的才是真正我們代碼中輸出的日誌資訊,如紅色框所框住的資訊就是第二部分範例程式碼所輸出的日誌資訊。

 

注意:這種方式下,Log Window視窗中只輸出訊息層級高於INFO的日誌資訊,要查看低於這個層級的日誌資訊,需要配置ADFLogger的logging.xml檔案

 

使用ADFLogger日誌工具來進行程式的調試,這樣避免了在程式中使用System.out.println方法來列印資訊,也可以在產品交付的時候通過系統選項來控制

什麼樣層級的資訊需要輸出,而不是將任何程式的調試資訊也一併輸出。

 

如果我們希望除了看到程式中的日誌資訊,還希望查看一下運行時的診斷資訊,可以啟用診斷記錄來輸出相關資訊。

在回合組態器的JVM選項中添加:

-Djbo.debugoutput=console

 

這樣日誌視窗中就會列印出很詳細的診斷資訊,主要包括

  1. 作業系統資訊
  2. Java虛擬機器資訊
  3. 建立BindingContext資訊
  4. 裝載BC4J屬性
  5. 建立資料庫連接資訊
  6. 建立業務實體資訊

 

這樣的資訊可以協助我們進行一些疑難雜症的解決。

 

在Oracle ADF應該開發過程中,JDeveloper 11g開發工具提供了很多的調試方式和工具,隨著後續學習的深入,將記錄更多的調試方法。

 

本文轉自Oracle Seeker:http://oracleseeker.com/2008/11/20/debugging_adf_business_component_by_adflogger/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.