转自:http://blog.csdn.net/cunxiyuan108/article/details/6758604
对于任何一个应用开发架构,提供一个灵活方便的日志消息记录机制都是必须的,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代码:
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程序最方便的方式就是将日志信息写入到数据库表中
如下的查询:
- SELECT message_text
- FROM fnd_log_messages
- WHERE module LIKE 'fnd.framework.webui%' ORDERBY log_sequence