EBS开发中记录日志信息

Oracle EBS 11i or higher

 

对于任何一个应用开发架构,提供一个灵活方便的日志消息记录机制都是必须的,Oracle EBS提供了一套完整的日志框架,它为调试、错误报告和错误提醒等提供了一个完整的机制。

我们在Oracle EBS环境中进行二次开发的时候,需要充分利用日志框架提供的功能来记录各种日志信息,方便程序的维护的调试。

 

本文主要描述在Oralce EBS环境下进行PLSQL程序开发时如何利用这套日志框架来进行日志信息的记录。

 

一、基本概念

 

1,日志的生命周期

 

记录日志:在程序代码中根据日志的级别记录日志信息

日志需求:程序产生错误或者问题,开发人员需要查看一些辅助信息

日志输出:在不更改程序的前提下,运行程序,将日志信息输出,根据日志信息定位或调试问题

清除日志:如果日志信息已使用结束,可以将其清除

 

 

2,日志的级别

 

在程序代码中,不同类型的日志信息可能表示不同严重性,开发人员也会给予不同的关注度,因此在程序中输出日志信息时需要将其分出不同的等级输出,

方便后续根据不同的需求进行必要的查看和调试

 

1-STATEMENT:很少使用这个级别来记录日志信息

2-PROCEDURE:一般在PLSQL程序中,如果希望打印一些参数值或者运行过程中的中间值都采用这个级别

3-EVENT:在PLSQL程序中很少使用

4-EXCEPTION:程序发生异常的时候,输出一些异常信息的时候使用,因此在PLSQL的Exception部分往往需要采用这个级别

5-ERROR:当发生某些可预知错误的时候使用这个级别,因此在PLSQL的Exception部分,一些可以预知的错误分支采用这个级别

6-UNEXPECTED:当发生某些不可预知错误的时候使用这个级别,因此在PLSQL的Exception部分,不可以预知的错误分支采用这个级别

 

数字越大代表问题的严重性越大,意味着这样的日志信息也越少,因此程序编码中需要根据情况输出不同级别的日志信息。

 

3,预制文件

 

Oracle EBS系统中,通过以下几个预制文件来控制是否开启日志记录、输出哪些级别的日志信息、输出哪些模块相关的日志信息等等。

 

AFLOG_ENABLED:用来指定是否开启日志记录功能,默认是NULL(不开启)

AFLOG_LEVEL:指定日志记录的级别,默认是NULL(Log.UNEXPECTED),这个值代表了日志输出的最低级别,只要是级别比它高的日志信息都将被输出

AFLOG_MODULE:指定要开启哪个模块的日志记录,默认是NULL(%,所有模块)

AFLOG_FILENAME:指定应用服务器的文件地址和名称,用来写入日志信息

 

 

二、PLSQL开发中记录日志信息的步骤

 

1,记录日志信息

 

在PLSQL代码中按照日志信息的级别输出日志信息,编写如下的PLSQL代码:

 

? View Code PLSQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
G_MODULE_PREFIX     VARCHAR2(100) := 'cux.plsql.PACKAGE_NAME';
l_procedure_name    VARCHAR2(30):= 'PROCEDURE_NAME';
 
PROCEDURE log
(p_level   IN VARCHAR2
,p_module  IN VARCHAR2
,p_message IN VARCHAR2)
IS
BEGIN
  IF(p_level >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
  THEN
  fnd_log.STRING(LOG_LEVEL => p_level
                ,MODULE    => p_module
                ,MESSAGE   => p_message
                );
  END IF;
END;
 
IF(FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
THEN
  log(FND_LOG.LEVEL_PROCEDURE,G_MODULE_PREFIX || l_procedure_name, 'some logging information......');
END IF;

 

上面代码中fnd_log.string的三个参数:

  1. LOG_LEVEL:将日志信息记录为什么级别,只有开启日志级别比它高的时候才会打印出日志信息,否则不打印
  2. MODULE:将日志信息记录到哪个模块,模块的命名规范为:<模块简称>.<语言>.<包名>,如 cux.plsql.PACKAGE_NAME
  3. MESSAGE:需要输出的日志信息

 

FND_LOG.G_CURRENT_RUNTIME_LEVEL这个全局变量则是目前Oracle EBS环境启用的消息级别是多少?它的值来至于预知文件AFLOG_LEVEL的设置

 

 

2,输出日志信息

 

需要输出日志的时候,只要首先开启相关的预知文件,然后运行程序,根据设置察看日志信息即可。

 

设置相关的预制文件,设置预知文件的值最好遵循以下规则:

  1. 设置在用户层
  2. 日志级别尽量高,减少日志输出信息
  3. 指定日志输出模块,尽量少使用代表全部模块的(%)

 

曾经在我们的系统中,由于在系统层启用了所有模块的日志信息,发现第二天就将近2G的数据库空间吃光了!!!

 

如果设置了AFLOG_FILENAME,即日志信息写入的文件,那请查看文件的内容;

而如果没有没有设置日志文件路径,日志信息写入数据库表:FND_LOG_MESSAGES,而PLSQL程序最方便的方式就是将日志信息写入到数据库表中

如下的查询:

? View Code PLSQL
1
2
3
4
SELECT message_text
  FROM fnd_log_messages
 WHERE module LIKE 'fnd.framework.webui%'
 ORDER BY log_sequence

 

 

 

更多关于Oracle EBS 日志信息的内容可查看相关文档。

 

 转载自:http://oracleseeker.com/2008/11/17/using_logging_framework_plsql_of_oracle_ebs/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值