mysql存储过程加日志_mysql存储过程加异常监控

本文介绍了如何在MySQL中为存储过程添加日志记录功能,包括创建日志表`proc_exec_log`用于存储过程执行信息,定义`proc_insert_log`存储过程用于插入日志,以及在业务存储过程中使用DECLARE声明变量捕获异常,并调用日志插入方法记录执行状态和异常信息。
摘要由CSDN通过智能技术生成

-- 日志记录表

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 ;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值