ORACLE在存儲過程中記錄日志的處理包


   Java開發過程中一般使用LOG4J來將程序的運行日志記錄到文件中,在ORACLE存儲過程中也需要記錄日志,我將工作中自己整理的一個記錄日志的包分享出來,其實很簡單,希望大家多提意見。

  一、表結構

    為了能給運維人員查看到相關日志,日志最好記錄在表中,表信息如下:

   

 其中序號並不是必須的,日志級別參考了LOG4J的日志類型,但沒有全部拿過來,只是將常用的幾個拿過來了。

 

二、實現

實現就是按照表結構插入數據了,這里為了更方便一些,定義了一個包,插入時對字段進行了長度4000的截取,詳細如下:

 

[sql] 

create or replace package body PKG_LOG is
/*存儲過程記錄日志*/
/*記錄消息*/
PROCEDURE INFO(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), 'INFO',sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;
/*記錄測試*/
PROCEDURE DEBUG(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), 'DEBUG',sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;
/*記錄錯誤*/
PROCEDURE ERROR(p_proc_name varchar2, title varchar2, content varchar2) is
begin
INSERT INTO t_proc_logs(xh,proc_mc,title,content, log_type,log_time)
VALUES (SEQ_T_PROC_LOGS_XH.NEXTVAL, upper(p_proc_name), substr(title,1,4000), substr(content,1,4000), 'ERROR',sysdate);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
ROLLBACK;
END;

end PKG_LOG;


三、使用

只要在需要進行記錄日志的時候調用:PKG_LOG.INFO(‘日志標題’,‘日志內容’)即可,和LOG4J的使用一致。
 

四、擴展和完善

1.可以做一個界面,對日志表進行查詢,可以更方便查看日志,並可通過查詢是否有ERROR日志,判斷指定的的存儲過程運行是否正常。
2.由於日志是記錄在數據庫中,所以需要建立一個定時任務,將DEBUG或INFO的數據,通過日志時間刪除掉,以保證日志表里的數據不會過度增長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM