千家信息网

如何进行JDK日志框架中的STAF浅析

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇文章给大家分享的是有关如何进行JDK日志框架中的STAF浅析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JDK日志框架之实例结合S
千家信息网最后更新 2025年01月18日如何进行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 类定义

public class STAFLog   {   public STAFLog(String logType, String logName, STAFHandle handle);   public STAFResult log(int level, String msg)   // Log type constAnts   public static STAFResult log(STAFHandle theHandle, String logType,    String logName, int level, String msg)   public String getName();   public String getLogType();   public int getMonitorMask();   ... //other methods   }


从清单 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 类实现

import java.util.logging.*;   import com.ibm.staf.wrapper.STAFLog;    public class STAFHandler extends Handler {   private String logName;   private static STAFHandle stafHandle = null;   public STAFHandler(String name) {   configure();   logName = name;   }   public STAFHandler() {   configure();   }    @Override   public void close() throws SecurityException {   if (stafHandle != null){   try {   stafHandle.unRegister();   } catch (STAFException e) {   //ignore   }   }   }    @Override   public void flush() {   //nothing   }    @Override   public void publish(LogRecord record) {   if (!isLoggable(record)) {   return;   }   String msg;   try {   msg = getFormatter().format(record);   } catch (Exception ex) {   reportError(null, ex, ErrorManager.FORMAT_FAILURE);   return;   }    try {   STAFLog.log(stafHandle, STAFLog.MACHINE,   logName, record.getLevel().getName(), msg);   } catch (Exception ex) {   reportError(null, ex, ErrorManager.WRITE_FAILURE);   }    ...


在实现 STAFHandler 类时有以下几个要点:

1、由于 STAF API 的调用时需要一个 STAFHandle 的对象来代表本地的 STAF 服务,在该类中声明了一个全局变量用来存储 STAFHandle .

2、close 方法是用来清理系统资源的,上述代码的 close 方法中释放了全局变量 STAFHandle 对象。

3、publish 方法就是获得格式化后的消息后,直接调用 STAF 的日志 API 将日志发送到 STAF 服务中。

但到目前为止,我们还没有给 STAFHandler 类添加一个配置的代码,使之可以支持配置文件。下面我们定义了一个函数 configure,其代码如清单 9 所示。

清单 9 配置函数实现

private void configure() {  if (stafHandle == null) {  try {  stafHandle = new STAFHandle("my application");  } catch (STAFException e) {  reportError("registe staf handle error", e, ErrorManager.OPEN_FAILURE);  }  }   LogManager manager = LogManager.getLogManager();  String cname = getClass().getName();  //set staf log name  logName = manager.getProperty(cname + ".name");  if (logName == null)  logName = "demo.staflog";   //set formatter  String sformatter = manager.getProperty(cname + ".formatter");  Formatter formatter = null;  if (sformatter != null) {  try {  formatter = (Formatter)Class.forName(sformatter).newInstance();  } catch (Exception e) {  //ignore  }  }   setFormatter(formatter == null? new STAFFormatter() : formatter);   //set level  String sLevel = manager.getProperty(cname + ".level");  Level level = null;  if (sLevel != null) {  try {  level = STAFLevel.parse(sLevel);  } catch (Exception e) {  //ignore  }  }  setLevel(level == null? STAFLevel.DEBUG : level);  }


在实现配置文件支持的代码中,有以下几个要点:

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浅析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

日志 服务 对象 框架 清单 配置 方法 代码 文件 测试 自动化 全局 函数 管理 信息 变量 同时 属性 接口 级别 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 linux 初始化数据库 浦江软件开发方向 学习网络安全和信息化体会 重庆服务器机柜批发虚拟主机 达尔豪斯网络安全硕士申请难度 哪些士官学校有网络安全专业 软件开发项目 监督检查 沈阳腾盛网络技术有限公司 广东服务器机柜怎么挑选 服务器不开机电源按钮快速闪烁 药品研发数据库 学游戏软件开发怎么样 特斯拉中国数据服务器 街霸5为什么不能登陆服务器 上海中传网络技术怎么样 服务器被压测 市上检查电视台网络安全 我国网络安全工作进入快车道 网络安全不烦恼歌曲歌词 帆软应用连接数据库不稳定 2020国家网络安全周形势 银行都用什么数据库 江西哪里可以学软件开发 塔式gpu服务器采购技术参数 atca托盘面板服务器通讯面板 服务器销售怎么备案 网络安全策略实验总结 学校分享的服务器如何打开 UI跟数据库那个比较好 金融科技大学网络安全
0