-- 日志记录表
DROP TABLE IF EXISTS `proc_exec_log`;
CREATE TABLE `proc_exec_log` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`proc_name` varchar(100) DEFAULT NULL COMMENT '存储过程名称',
`begin_time` datetime DEFAULT NULL COMMENT '开始时间',
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
`exec_cost_time_s` float DEFAULT NULL COMMENT '执行时间,秒',
`exec_status` varchar(10) DEFAULT NULL COMMENT '执行状态',
`exec_msg` text COMMENT '异常信息',
PRIMARY KEY (`id`),
KEY `idx_begin_time` (`begin_time`),
KEY `idx_end_time` (`end_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='日志记录';
-- 插入日志的方法
DROP PROCEDURE IF EXISTS `proc_insert_log`;
DELIMITER ;;
CREATE PROCEDURE `proc_insert_log`(IN pName varchar(250),IN startTime datetime,IN endTime datetime,IN pStatus varchar(10),IN pMsg text)
BEGIN
-- 记录存储过程执行日志
INSERT INTO proc_exec_log(`proc_name`,`begin_time`,`end_time`,`exec_status`,`exec_msg`,`exec_cost_time_s`)VALUES(pName,startTime,endTime,pStatus,pMsg,timestampdiff(SECOND,startTime,endTime));
END
;;
DELIMITER ;
-- 业务存储过程
DROP PROCEDURE IF EXISTS `xxx`;
DELIMITER ;;
CREATE PROCEDURE `xxx`()
BEGIN
-- 设置日志变量
DECLARE log_name varchar(255);
DECLARE log_starttime datetime;
DECLARE log_endtime datetime;
DECLARE result_code varchar(10) DEFAULT '0';
DECLARE result_msg text;
-- 捕获异常
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
-- 获取异常code,异常信息
GET DIAGNOSTICS CONDITION 1
result_code = RETURNED_SQLSTATE, result_msg = MESSAGE_TEXT;
SET log_endtime = now();
-- 插入日志
CALL p_insert_log(log_name,log_starttime,log_endtime,result_code,result_msg);
END;
SET log_name = 'xxx';
SET log_starttime = now();
-- 业务开始
-- 业务结束
-- 记录日志
CALL p_insert_log(log_name,log_starttime,now(),'0','success');
END
;;
DELIMITER ;