EBS log

来源:互联网 发布:java用递归走迷宫 编辑:程序博客网 时间:2024/04/29 04:04

对于任何一个应用开发架构,提供一个灵活方便的日志消息记录机制都是必须的,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