目前,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...
