2012年12月21日星期五

通过utl_file记录EBS日志信息

在ebs通常会使用数据库表的方式记录日志信息, 但有些时候使用日志文件显得更加简洁和方便一些. 这里介绍使用oracle提供的utl_file包将诊断信息记录到日志文件中.

关于utl_file包完整的介绍, 参考这里. 关于utl_file包读写系统文件的权限说明, utl_file是不能直接读写操作系统文件的(除了参数utl_file_dir指定的目录), 它需要通过数据库Directory对象实现对文件的读写操作, 关于Oracle Directory参考这里. 因此在使用utl_file操作系统文件时, 需要创建好相关的directory并且分配相关的权限. 这里使用EBS系统自带的TMP目录, 该目录指向的系统目录是/tmp.

首先创建一个存储过程, 如下:

CREATE OR REPLACE PROCEDURE FTRACE(p_msg IN VARCHAR2)
IS
    LOG           UTL_FILE.file_type;
    l_file_name   VARCHAR2 (50) := 'ftrace.log';    -- trace file name
BEGIN
        LOG := UTL_FILE.fopen ('TMP'       -- oracle directory
                              , l_file_name
                              ,'a'
                              ,32767);     -- max lines
            UTL_FILE.put_line (LOG, p_msg);
            UTL_FILE.fflush (LOG);
            UTL_FILE.fclose (LOG);
EXCEPTION WHEN OTHERS THEN
    null;
END;
/

创建/tmp/ftrace.log文件, 并且将该文件的权限修改为777, 这样oracle数据库系统用户可写.
touch /tmp/ftrace.log
chmod 777 /tmp/ftrace.log
之后就可以在EBS的数据库存储过程或者forms存储过程中调用该存储过程, eg:
ftrace('test');
创建shell同义词方便清空和查看日志信息:

alias clst="echo -n '' > /tmp/ftrace.log"
alias chkt="cat /tmp/ftrace.log"

供参考.

--EOF--

没有评论:

发表评论