首页  ·  知识 ·  生产制造
EBS开发中记录日志信息
网友      编辑:德仔   图片来源:网络
对于任何一个应用开发架构,提供一个灵活方便的日志消息记录机制都是必须的,Oracle EBS提供了一套完整的日志框架,它为调试、错误报告和错误提醒等提供了
对于任何一个应用开发架构,提供一个灵活方便的日志消息记录机制都是必须的,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代码:
 
?[Copy to clipboard]View Code PLSQL1
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的三个参数:
LOG_LEVEL:将日志信息记录为什么级别,只有开启日志级别比它高的时候才会打印出日志信息,否则不打印
MODULE:将日志信息记录到哪个模块,模块的命名规范为:<模块简称>.<语言>.<包名>,如 cux.plsql.PACKAGE_NAME
MESSAGE:需要输出的日志信息
 
FND_LOG.G_CURRENT_RUNTIME_LEVEL这个全局变量则是目前Oracle EBS环境启用的消息级别是多少?它的值来至于预知文件AFLOG_LEVEL的设置
 
 
2,输出日志信息
 
需要输出日志的时候,只要首先开启相关的预知文件,然后运行程序,根据设置察看日志信息即可。
 
设置相关的预制文件,设置预知文件的值最好遵循以下规则:
设置在用户层
日志级别尽量高,减少日志输出信息
指定日志输出模块,尽量少使用代表全部模块的(%)
 
曾经在我们的系统中,由于在系统层启用了所有模块的日志信息,发现第二天就将近2G的数据库空间吃光了!!!
 
如果设置了AFLOG_FILENAME,即日志信息写入的文件,那请查看文件的内容;
而如果没有没有设置日志文件路径,日志信息写入数据库表:FND_LOG_MESSAGES,而PLSQL程序最方便的方式就是将日志信息写入到数据库表中
如下的查询:
?[Copy to clipboard]View Code PLSQL1
2
3
4
 SELECT message_text
  FROM fnd_log_messages
 WHERE module LIKE 'fnd.framework.webui%'
 ORDER BY log_sequence
 
 
 
更多关于Oracle EBS 日志信息的内容可查看相关文档。
 
本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的