ORACLE在存储过程中记录日志的处理包
2016-05-07 13:28
525 查看
Java开发过程中一般使用LOG4J来将程序的运行日志记录到文件中,在ORACLE存储过程中也需要记录日志,我将工作中自己整理的一个记录日志的包分享出来,其实很简单,希望大家多提意见。
![](http://img.blog.csdn.net/20150122160113156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVyZXlvdWFyZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中序号并不是必须的,日志级别参考了LOG4J的日志类型,但没有全部拿过来,只是将常用的几个拿过来了。
[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;
相关源码下载地址:http://download.csdn.net/detail/hereyouare/8380443
2.由于日志是记录在数据库中,所以需要建立一个定时任务,将DEBUG或INFO的数据,通过日志时间删除掉,以保证日志表里的数据不会过度增长。
一、表结构
为了能给运维人员查看到相关日志,日志最好记录在表中,表信息如下:其中序号并不是必须的,日志级别参考了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的使用一致。相关源码下载地址:http://download.csdn.net/detail/hereyouare/8380443
四、扩展和完善
1.可以做一个界面,对日志表进行查询,可以更方便查看日志,并可通过查询是否有ERROR日志,判断指定的的存储过程运行是否正常。2.由于日志是记录在数据库中,所以需要建立一个定时任务,将DEBUG或INFO的数据,通过日志时间删除掉,以保证日志表里的数据不会过度增长。
相关文章推荐
- oracle使用存储过程实现日志记录.sql
- oracle基本概念2
- oracle大数据量。表分区提示查询效率
- 无法启动OracleOraDb10_home2TNSListener服务 1067 :进程意外终止
- Oracle查询死锁及处理方法
- Oracle 11g Data Guard 之逻辑备库角色转换
- Oracle 11g Data Guard 之物理备库角色转换
- 恢复oracle中update或delete的数据
- oracle恢复误drop掉的表,试用于10g及以上
- ORACLE数据库-学习笔记1
- Oracle学习系列6
- Oracle 11g Data Guard 之角色转换
- ORACLE定时任务时间间隔设置
- MySQL/Oracle数据库的基础(二)
- Oracle揽萃
- Oracle学习系列5
- Oracle学习系列4
- Oracle学习系列3
- 详解Oracle DELETE和TRUNCATE 的区别
- 使用oracle的index,指定hint定位到的一个小问题