概览
OAF框架中的日志API是一个容易使用的工具,它可以把代码运行的日志信息写到数据库中的一个特定的表中或者到中间层的文件中,以便可以在用户友好的诊断页面查看。你也可以配置日志把日志信息直接附加到一个当前页面的后面。
这篇文章介绍了以下三项:
l 日志的工作原理
l 开启日志
l 中间层节点上的FND日志
关于日志的完整信息,参考Applications Release 12 OnlineDocumentation CD中的Oracle E-Business Suite Supportability Guide。关于如何使用Oracle Application Manager Applications Dashboard启用日志、查看日志信息和查看系统警报的完整信息,参考Oracle Applications System Administrator'sGuide – Maintenance中叫做Monitoring Oracle E-Business Suite的章节,可以在Applications Release 12 OnlineDocumentation CD找到。
日志的工作原理
如果你想记录代码运行信息,你必须在你的代码的合适位置先添加对OAF框架的日志API的调用。在运行时,如果启用了日志,每条你想要下来的消息都会记录到数据库表中(或者指定的文本文件中)。
要查看日志信息,选择任意页面中的诊断全局按钮(链接)(这个全局按钮配置为标准全局菜单的一部分并添加到每个页面;这个菜单是否显示是由profile FND: Diagnostics (FND_DIAGNOSTICS)来控制的).
注意:参数”retainAM=Y”添加到诊断全局按钮的URL,并链接到诊断页面。因此,用户要导航到诊断页面的页面AM会保留在诊断页面上。当用户用“返回应用”链接从诊断页面导航出时,AM是否保留依赖于导航到诊断页面的原始页面上的retainAM参数。
在你选择了诊断按钮后,会被导航到诊断页面,你可以选择:
l 显示日志(Show Log)-指引你到Oracle ApplicationsManager查看Oracle E-Business Suite系统的快照。关于如何使用Oracle ApplicationsManager页面的详细信息,请在任意OracleApplications Manager页面上帮助按钮或者参考OracleE-Business Suite System Administrator's Guide - Maintenance里叫做Monitoring OracleApplications的章节,可以在ApplicationsRelease 12 Online Documentation CD找到。
l 在屏幕上显示日志(ShowLog on Screen)-允许你为特定的HTTP请求和回应指定日志等级并在当前页面的后面显示Java日志消息。关于这个功能的更多信息,请参考OracleE-Business Suite Supportability Guide中How to Configure Logging章节叫做How to ConfigureLogging的部分,可以在ApplicationsRelease 12 Online Documentation CD找到。
l 设置跟踪等级(SetTrace Level)-将显示设置跟踪页面,在这个页面上你可以指定在数据库跟踪是收集信息的等级。关于这个功能的更多信息请参考enablinga database trace。
l 显示监视池(ShowPool Monitor)-显示ApplicationPool Monitor,在这个页面上可以你可以查看关于JVM运行时和配置信息的不同方面。关于这个功能的更多信息,请参考Monitoringthe Application Module Pool。
l 诊断(OracleDiagnostics)-是诊断页面上的一个单独的链接(不是弹出列表上的值)。如果你选择这个链接,你会被导航到Oracle Diagnostic的首页。要使用Oracle Diagnostic,请参考OracleE-Business Suite Supportability Guide,可以在ApplicationsRelease 12 Online Documentation CD找到。
性能考虑
如果禁止日志的话,那么在你的代码中调用日志API的成本是微不足道的。OAF框架会为当前用户缓存日志profile,所以一旦日志设置缓存了,在实际写任何日志之前,你仅需要付出调用API来确定是否启用了日志的代价。
如果启用了日志,确实在运行时会有性能影响,但通常用户不会启用日志,除非要诊断系统问题。
日志API
有如下的已公布的日志方法在下面两个类中:
oracle.apps.fnd.framework.webui.OAPageContext和oracle.apps.fnd.framework.server.OADBTransaction,分别用户客户端和服务端代码访问(比如,如果你要在UI控制器里调用日志API,应使用OAPageContext. 如果你想从AM中调用日志API,应使用OADBTransaction)。这两个类中你要使用的方法在Oracle E-Business Suite Supportability Guide的LoggingGuidelines for Developers章节的"How to Log from Java"部分有详细的描述,可以在ApplicationsRelease 12 Online Documentation CD找到。
记录消息内容
每条日志消息都包含了几个组件,都在Oracle E-Business Suite Supportability Guide的LoggingFramework Overview章节里有详细描述,可以在ApplicationsRelease 12 Online Documentation CD找到。
模块
除了等级之外,报告日志消息的模块(完全合格的类名)也会被记录下来。这用于确认消息的来源。
日志等级使用指导
关于日志等级使用的详细指导,请参考Oracle E-Business Suite Supportability Guide的LoggingConfiguration Parameters章节的"AFLOG_LEVEL"部分,可以在ApplicationsRelease 12 Online Documentation CD找到。
警告:日志会有性能成本。小心使用低等级的日志(比如,procedure和statement等级).还有,一定要在连接构造日志消息的字符串之前先检查是否启用了日志。
启用日志
尽管日志特性最终是由一系列profile选项控制的,但你应该使用Oracle Applications Manager Log Setup页面来配置你的日志特性。你再这个页面上的更改会自动更新日志相关的profile.关于如何使用Log Setup 页面的信息,可以参考Oracle E-Business Suite System Administrator'sGuide - Maintenance中"Monitoring Oracle Applications"章节中"SettingUp Logging"部分,可以在ApplicationsRelease 12 Online Documentation CD找到。
Profile使用指导
对一个已部署的模块(相对于正在开发的模块),仅仅UNEXPECTED错误(这些需要管理员的主要)应该被记录.还有,通常的,用户不应该能访问诊断页面。站点级别的profile FND: Diagnostics (FND_DIAGNOSTICS)的值应该设置为No.
如果在客户站点上记录了一个问题,那么系统管理员应该使用把profile FND: Diagnostics (FND_DIAGNOSTICS)设置为Yes的用户登录系统来研究这个问题。
中间层节点上的FND日志
启用日志的步骤
1.Telnet到E-Businesssuite R12中间层instance.
2.使用下面的脚本关闭OC4J服务器
$INST_TOP/admin/scripts/adoacorectl.shstop
或者
$INST_TOP/admin/scripts/adopmnctl.shstopall
3.备份文件$ORA_CONFIG_HOME/10.1.3/opmn/conf/opmn.xmlfile
4.编辑opmn.xml文件的dataid="java-options"节点,并添加下面的代码
-DAFLOG_ENABLED=true-DAFLOG_LEVEL=statement -DAFLOG_MODULE=fnd%
-DAFLOG_FILENAME=/tmp/fndlog.txt -Djbo.debugoutput=console
5.更新后的行应该看起来如下(带详细的路径)
<dataid="java-options" value="-server -verbose:gc -Xmx512M -Xms128M -XX:MaxPermSize=160M -XX:NewRatio=2 -XX:+PrintGCTimeStamps-XX:+UseTLAB -XX:+UseParallelGC -XX:ParallelGCThreads=2-Dcom.sun.management.jmxremote -DAFLOG_ENABLED=true -DAFLOG_LEVEL=statement-DAFLOG_MODULE=fnd% -DAFLOG_FILENAME=/tmp/aflog.txt -Djbo.debugoutput=console -Djava.security.policy=$ORACLE_HOME/j2ee/oacore/config/java2.policy -Djava.awt.headless=true -Dhttp.webdir.enable=false -Doracle.security.jazn.config=/nfs/bld/d25/PRUP2X2/inst/apps/PRUP2X2_ap6002bld /ora/10.1.3/j2ee/oacore/config/jazn.xml"/>
6.使用下面的脚本启动OC4J服务器
$INST_TOP/admin/scripts/adoacorectl.shstop
或者
$INST_TOP/admin/scripts/adopmnctl.shstopall
7.然后FND日志会被写入到文件/tmp/fndlog.txt中。
获取FND日志消息的步骤
1. 要在中间层启用日志,通过添加下面的行中的OC4J参数到文件
$INST_TOP/ora/10.1.3/j2ee/oacore/config/oc4j.properties
FND_VALIDATION_LEVEL=Log
FND_FUNCTION_VALIDATION_LEVEL=Log
FRAMEWORK_VALIDATION_LEVEL=Log
AFLOG_ENABLED=TRUE
AFLOG_LEVEL=UNEXPECTED
AFLOG_MODULE=fnd%
AFLOG_FILENAME=/tmp/fnd.log
2. 在数据库层启用日志
使用”System Administrator”职责登陆到EBS并设置下面的系统Profiles在站点级别设置为如下的值:
Profile Name Value
-----------------------------------------------
FND: Debug Log Enabled Yes
FND: Debug Log Module fnd%
FND: Debug Log Level Statement
FND: Debug Log Filename <path>/fnd.log
注意—确认你设置了日志目录为绝对路径替换<path>.在中间层上的日志设置的优先级要比数据库层的要高。
3. 重启下面的服务器:
HTTP 服务器(使用脚本adapcctl.sh)
OC4J服务器(使用脚本adoacorectl.sh)
4.使用下面的SQL脚本获取表fnd_log_messages中最大的序列号:
SQL> selectmax(log_sequence) from fnd_log_messages
5.重现问题
6.上传下面的FND日志信息:
fnd.log
7. 运行下面的SQL脚本并使用excel格式上传结果:
SQL> select module, message_text, log_sequence
from fnd_log_messages
where module like 'fnd%' and log_sequence > &max(log_sequence) from result-of-stepabove
使用debug.zip文件从客户instance上获取日志详细信息的步骤
1. 使用下面的脚本关闭OC4J服务器
$INST_TOP/admin/scripts/adoacorectl.shstop 或者$INST_TOP/admin/scripts/adopmnctl.sh stopall
2.下载debug.zip文件到中间层节点上,确认debug.zip在我们使用它的位置是可访问的,你可以使用下面的命令.
$ chmod 777debug.zip
3.备份文件
$ORA_CONFIG_HOME/10.1.3/j2ee/oacore/application-deployments/oacore/orion-application.xml
4. 编辑文件orion-application.xml并把debug.zip文件的完全路径作为库类路径的第一入口(这点非常重要)
.....
<librarypath="..../debug.zip" />
5.使用下面的脚本启动OC4J服务器
6.$INST_TOP/admin/scripts/adoacorectl.shstop 或者$INST_TOP/admin/scripts/adopmnctl.sh stopall
7.重现问题并上传下面的日志文件
$INST_TOP/logs/ora/10.1.3/opmn/oacore_default_group_1/oacorestd.out
$INST_TOP/logs/ora/10.1.3/j2ee/oacore/oacore_default_group_1/application.log
对其它的日志信息,有一个Metalink的文章,"How to enable Apache, OC4J and OPMN logging in OracleApplications R12" - 419839.1。