MySQL存储过程日志

时间:2019-11-09 02:38:38

标签: mysql logging stored-procedures

我有一个应用程序,其中包含存储过程中的所有业务规则。 每个存储过程都调用一个称为verificaToken的存储过程。此过程的功能是验证会话令牌是否正确。 我想记录所有存储过程调用,并且我想使用此verificaToken,因为已经在所有存储过程中实现了。 无论如何,verificaToken是否可以识别它的调用方和参数?

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在请求类似于反射包的内容,以便verificaToken可以获取有关调用堆栈的信息。

否,MySQL存储过程中没有有关调用堆栈的信息功能。

您唯一可以做的是:

  • 每次调用时,将信息作为参数传递给verificaToken。
  • 设置用户定义的变量,可以通过verificaToken读取。

此处定义了用户定义的变量:https://dev.mysql.com/doc/refman/8.0/en/user-variables.html

示例:

mysql> delimiter ;;

mysql> create procedure myproc()
    -> begin
    -> set @mycaller='myproc';
    -> call verificaToken();
    -> end;;

mysql> create procedure verificaToken()
    -> begin
    -> select @mycaller;
    -> end;;

mysql> delimiter ;

mysql> call myproc();
+-----------+
| @mycaller |
+-----------+
| myproc    |
+-----------+

返回的结果集来自verificaToken()。您可以在该过程的主体中使用该变量执行任何操作,例如按照您所说的进行记录。我只是在说明一个人可以在一个过程中设置一个变量,并且它对您调用的任何其他过程都是自动可见的。

这些变量在任何过程都可以读取的意义上是“全局”的,但仅限于您自己的MySQL会话,因此没有并行客户端可以读取该变量。