Jan 09 2010

使用EBS日志功能

Category: E-Business SuiteZeeno @ 15:26

目前,EBS系统中存在多种日志记录方式,有用于PL/SQL的,有用于Java的,有OAF等开发框架自带的,也有Forms Server之类服务器专用的诊断方式。通常来讲,所有二次开发,为了统一规范和便于管理,应当将将客户化系统中日志记录和Oracle EBS中的日志记录进行整合,用统一的方式进行日志记录和诊断。

Oracle EBS调试日志级别

系统中将调试日志级别分为6个级别,分别是:

Type Level Description
UNEXPECTED 6 未知异常
ERROR 5 错误
EXCEPTION 4 异常
EVENT 3 事件
PROCEDURE 2 过程
STATEMENT 1 语句,该级别最低,记录的日志信息也最详细。

该级别通过配置文件 FND:调试日志级别 控制。

调试日志模块

日志必须指定当前所执行的程序,也就是所谓的模块。模块用于区分不用程序产生的日志,比如我的一套用于将EBS事件通过手机短消息发送出去的整套程序统一定义成日志模块:oracle.apps.cux.msg.transport。如此,不论是简单的PL/SQL、Form或并发程序产生的短信内容,都可以作为一个整体进行日志记录。模块名可以自行定义,该定义需要有意义,并能和其他程序明确区分。该特性由配置文件 FND:调试日志模块 控制。

不需要修改代码,诊断时可以根据需要随时启用或关闭调试日志,由配置文件 FND:启用调试日志 控制。

调用示例

先在程序中创建过程,如:

PROCEDURE trace(x_level   IN NUMBER,
                x_message IN VARCHAR2) IS
BEGIN
  IF (x_level >= fnd_log.g_current_runtime_level) THEN
    IF (fnd_log.test(x_level, 'oracle.apps.cux.msg.transport')) THEN
      fnd_log.STRING(log_level => x_level,
                     module    => 'oracle.apps.cux.msg.transport',
                     message   => x_message);
    END IF;
  END IF;
EXCEPTION
  WHEN OTHERS THEN
    NULL;
END trace;

然后用以下方式调用:

trace(fnd_log.level_procedure, 'Enter get_num');

日志查看

SELECT *
  FROM fnd_log_messages f
 WHERE f.user_id = 1113
   AND f.log_sequence > 492519740
 ORDER BY f.log_sequence;

对于普通的二次开发(一些较大的平台可能需要有自己的诊断方式),建议使用通过的方式记录日志,否则,如果各行其是,或者随手就自己设计一套日志记录方式的,当开发数量到达一定规模时,会让管理工作变得复杂。

题外:
这是早期时给团队中二次开发制订的相关规范的一部分,记在Confluence上。近日考虑撤出该平台,在角落里翻出来的一篇。另外,知识库的建设真是一项即简单又麻烦的工作……


相关阅读:

  • 跟踪(Trace)并发请求
    Oracle EBS中跟踪form执行非常简单,可以直接在菜单:帮助->诊断->跟踪 中启用跟踪功能。对于并发请求,稍见麻烦。 如果要对某个并发程序进行跟踪,则先进系统管理员职责,在并发程序定义界面找到该并发程序,勾选“启用跟踪”。在运行该请求的时候,会自动启用跟踪功能。如果需要跟踪绑定变量,要先执行bde_system_event_10046.sql (参考metalink:179848.1)。 用以下SQL找到相应的trc文件: SELECT 'Request...
  • RF.jsp (Run Function)
    在Oracle EBS中,不论是Form还是OAF,只要定义成功能了,就可以通过RF.jsp进行调用。这种方式有个最大的方便就是,你可以把链接放到任何你想放置的地方,比如说邮件正文。事实上,Oracle标准的调用方式也是如此。 一种标准的创建URL的方式是利用标准函数fnd_run_function.get_run_function_url。如: DECLARE l_url VARCHAR2(2000); BEGIN l_url...
  • 破解 Oracle E-Business Suite 用户密码
    APPS.FND_WEB_SEC 管理着跟用户授权相关的数据,比如密码。 这个包里面有加密和解密函数: -- Function to encrypt a...

Leave a Reply