成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JDK日志框架之實例結合STAF淺析

開發 后端
JDK日志框架之實例結合STAF是什么呢?本文向你介紹了JDK日志框架中的STAF的概念以及其實現的基本情況。

JDK日志框架之實例結合STAF,STAF 日志服務概念的提出,這方面是什么情況呢?讓我們首先從什么是STAF開始。

STAF(Software Testing Automation Framework)是一個自動化軟件測試框架,它可以實現分布式的自動化軟件測試管理。我們可以應用 STAF 庫的 Java API 來做基于 STAF 框架的應用,同時 STAF 同時也提供了日志服務。其日志服務是用來記錄自動化測試流程中的信息,方便在 24x7 的自動化測試中記錄自動化測試的操作,便于發現潛在的自動化測試管理腳本的問題。

既然我們可以用 STAF 的 Java API 來做基于 STAF 的應用,我們也可以將JDK 的日志框架同 STAF 的日志服務接口結合起來。 STAF 的日志服務的 java 接口定義如清單 7 所示:

清單 7 STAFLog 類定義

  1. public class STAFLog   
  2. {   
  3. public STAFLog(String logType, String logName, STAFHandle handle);   
  4. public STAFResult log(int level, String msg)   
  5. // Log type constAnts   
  6. public static STAFResult log(STAFHandle theHandle, String logType,   
  7.  String logName, int level, String msg)   
  8. public String getName();   
  9. public String getLogType();   
  10. public int getMonitorMask();   
  11. ... //other methods   
  12. }  


從清單 7 我們可以看出,STAFLog 類提供了方法可以將日志信息存儲到 STAF 的日志庫中, 這個日志庫既可以是本地的文件,也可以是另一個 STAF 服務器上的JDK日志庫。這是通過本地 STAF 服務器的配置來決定的。而 STAFLog.log() 方法只用于記錄日志信息。

將 STAF 日志服務的 java API 同JDK日志框架結合起來需要做如下步驟:

創建 STAF 日志 Handler 類

該類封裝了 STAF 日志服務 API 的接口。同時 STAF 的 Java API 需要一個全局的 STAFHandle 對象,用來表示本地的 STAF 服務句柄。這個可以通過建立一個靜態的 STAFHandle 對象即可。其代碼如下所示,我們定義了一個 STAFHandler 類如清單 8 所示。

清單 8 STAFHandler 類實現

  1. import java.util.logging.*;   
  2. import com.ibm.staf.wrapper.STAFLog;   
  3.  
  4. public class STAFHandler extends Handler {   
  5. private String logName;   
  6. private static STAFHandle stafHandle = null;   
  7. public STAFHandler(String name) {   
  8. configure();   
  9. logName = name;   
  10. }   
  11. public STAFHandler() {   
  12. configure();   
  13. }   
  14.  
  15. @Override   
  16. public void close() throws SecurityException {   
  17. if (stafHandle != null){   
  18. try {   
  19. stafHandle.unRegister();   
  20. } catch (STAFException e) {   
  21. //ignore   
  22. }   
  23. }   
  24. }   
  25.  
  26. @Override   
  27. public void flush() {   
  28. //nothing   
  29. }   
  30.  
  31. @Override   
  32. public void publish(LogRecord record) {   
  33. if (!isLoggable(record)) {   
  34. return;   
  35. }   
  36. String msg;   
  37. try {   
  38. msg = getFormatter().format(record);   
  39. } catch (Exception ex) {   
  40. reportError(null, ex, ErrorManager.FORMAT_FAILURE);   
  41. return;   
  42. }   
  43.  
  44. try {   
  45. STAFLog.log(stafHandle, STAFLog.MACHINE,   
  46. logName, record.getLevel().getName(), msg);   
  47. } catch (Exception ex) {   
  48. reportError(null, ex, ErrorManager.WRITE_FAILURE);   
  49. }   
  50.  
  51. ...  


在實現 STAFHandler 類時有以下幾個要點:

1、由于 STAF API 的調用時需要一個 STAFHandle 的對象來代表本地的 STAF 服務,在該類中聲明了一個全局變量用來存儲 STAFHandle .

2、close 方法是用來清理系統資源的,上述代碼的 close 方法中釋放了全局變量 STAFHandle 對象。

3、publish 方法就是獲得格式化后的消息后,直接調用 STAF 的日志 API 將日志發送到 STAF 服務中。

但到目前為止,我們還沒有給 STAFHandler 類添加一個配置的代碼,使之可以支持配置文件。下面我們定義了一個函數 configure,其代碼如清單 9 所示。

清單 9 配置函數實現

  1. private void configure() {  
  2. if (stafHandle == null) {  
  3. try {  
  4. stafHandle = new STAFHandle("my application");  
  5. } catch (STAFException e) {  
  6. reportError("registe staf handle error", e, ErrorManager.OPEN_FAILURE);  
  7. }  
  8. }  
  9.  
  10. LogManager manager = LogManager.getLogManager();  
  11. String cname = getClass().getName();  
  12. //set staf log name  
  13. logName = manager.getProperty(cname + ".name");  
  14. if (logName == null)  
  15. logName = "demo.staflog";  
  16.  
  17. //set formatter  
  18. String sformatter = manager.getProperty(cname + ".formatter");  
  19. Formatter formatter = null;  
  20. if (sformatter != null) {  
  21. try {  
  22. formatter = (Formatter)Class.forName(sformatter).newInstance();  
  23. } catch (Exception e) {  
  24. //ignore  
  25. }  
  26. }  
  27.  
  28. setFormatter(formatter == null? new STAFFormatter() : formatter);  
  29.  
  30. //set level  
  31. String sLevel = manager.getProperty(cname + ".level");  
  32. Level level = null;  
  33. if (sLevel != null) {  
  34. try {  
  35. level = STAFLevel.parse(sLevel);  
  36. } catch (Exception e) {  
  37. //ignore  
  38. }  
  39. }  
  40. setLevel(level == null? STAFLevel.DEBUG : level);  
  41. }  


在實現配置文件支持的代碼中,有以下幾個要點:

1、STAF API 的初始化需要注冊 STAFHandle 對象。而且該注冊只能執行一次。我們根據全局變量 stafHandle 的值來決定是否注冊該對象。

2、JDK的日志框架有一個全局的 singleton 管理類 STAFManager,該類用于管理日志類,并提供了讀取日志配置文件的成員函數 getProperty 。在上述的代碼中,我們通過 STAFManager.getProperty 方法,從日志配置文件中讀取 STAFHandler 對象所設置的 Formatter 類名,然后通過反射生成一個新的 Formatter 對象,設置到 Handler 對象中。

3、對于日志級別也是通過 STAFManager.getProperty 方法。需要注意的是由于我們的日志級別是自定義的級別,所以 Level 對象是由我們自定義的 Level 類 STAFLevel 來生成的。

4、我們也能定義自己需要的屬性。比如清單 9 中我們定義了一個 .name 屬性,用來存儲 STAF 日志名稱,通過 getProperty 函數從配置文件中讀取 .name 屬性。

JDK日志框架之實例結合STAF的情況就介紹到這里,那么關于JDK日志框架之實例結合STAF的更多情況,我們要在學習過程中加以鞏固提高。

【編輯推薦】

  1. Java虛擬機內部構成淺析
  2. 淺談Java線程的生命周期
  3. 關于Java繼承的一些復習
  4. 實現Java中對象比較的兩個方法
  5. Java中兩個特殊變量this和super 的使用
責任編輯:仲衡 來源: 新浪博客
相關推薦

2009-07-07 15:53:02

JDK日志

2009-07-07 14:00:25

JDK日志Handler

2009-07-07 13:45:52

JDK日志框架

2010-02-05 15:33:29

Android JDK

2009-07-07 16:13:39

JDK日志

2009-07-07 14:32:47

JDK日志Formatter

2009-07-07 16:39:40

JDK Observe

2009-07-08 17:59:51

JDK JRE

2009-07-09 11:02:37

JDK5.0內置工具

2009-07-08 14:06:22

ClassLoaderJDK源碼

2011-07-07 17:06:03

SQL Server

2022-05-24 07:39:09

MySQL數據庫日志

2009-07-16 09:14:26

iBATIS DAO

2009-09-14 16:46:15

LINQ to XML

2009-09-22 13:09:06

Hibernateorm框架

2009-07-27 14:29:31

ASP.NET編程彈窗報警提示

2009-07-22 09:44:05

iBATIS Para

2009-08-27 13:30:11

C# interfac

2009-07-08 17:02:11

JDK實現調用攔截器

2009-08-06 10:49:45

ASP.NET服務器控
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级二级视频 | 日韩中文字幕 | 91精品国产综合久久久久久丝袜 | 免费一区二区在线观看 | 欧美精品一区在线 | 国内自拍第一页 | 欧美一区二区小视频 | 成人精品在线观看 | 综合精品 | 精品欧美一区二区在线观看 | 国产丝袜一区二区三区免费视频 | 天堂中文在线播放 | 色天天综合 | 欧美自拍视频 | 国产99热在线 | 中文字幕在线欧美 | 91精品国产91久久久久久三级 | 亚洲一区二区三区在线 | 97在线观看| 天天操夜夜操 | 成人1区| 国产精品一区一区 | 国产精品久久久久久久久久久久久 | 成人影视网址 | 青青久草 | 九九综合 | 男人天堂免费在线 | 国产欧美精品一区 | 日韩中文在线观看 | 欧美在线天堂 | 国产成人免费 | 久久久免费在线观看 | 在线欧美日韩 | 亚洲精品久久视频 | 99免费在线视频 | 欧美一级黄色片在线观看 | 成人a免费 | 久久久久久久久国产 | 成人av一区 | 欧美伊人久久久久久久久影院 | 美女黄18岁以下禁止观看 |