ADFLogger记录日志和调试ADF业务组件

一、基本知识

 

下面一段是摘自域于java.util.logging JDK说明文档中关于使用日志的四个主要目标:

  1. 由最终用户和系统管理员进行问题诊断。这由简单的常见问题日志组成,可在本地解决或跟踪这些问题,如资源不足、安全失败和简单的配置错误。
  2. 由现场服务工程师进行问题诊断。现场服务工程师使用的日志信息可以相当复杂和冗长,远超过系统管理员的要求。通常,这样的信息需要特定子系统中的额外日志记录。
  3. 由开发组织进行问题诊断。在现场出现问题时,必须将捕获的日志信息返回到原开发团队以供诊断。此日志信息可能非常详细,并且相当费解。这样的信息可能包括对特定子系统进行内部执行的详细跟踪。
  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中记录日志信息的代码:

首先是创建一个日志记录器;然后输出日志信息。

 

代码中记录日志信息可以采取两种办法:

  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来测试运行业务组件,并根据实际组件进行数据操作:

 

obcb_test

 

操作之后查看Log Window的输出信息:

adflogger_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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值