几行代码给MySQL增加日志实时输出函数

1.简介

对MySQL源码感兴趣的小伙伴,在学习源码的过程中都会有想一探某处代码在运行时当前的数据是个怎样的内容或者执行流程,想要知道具体情况无非可以通过两种方式,一种是gdb下断点查看,另外一种就是直接在想要查看的代码位置加入日志输出方式。输出日志的方式又分多种,比如有的可以用自带的设置调试模式输出调试日志,有的则可以采用自己添加输出错误日志形式。我们此处要说的就是使用后者,因本人比较习惯使用直接按自定义的格式自由组合输出且无参数限制方式,并希望实时看到输出信息,而目前现有的MySQL几个日志输出函数并不完全满足需求,因此在MySQL原有的一些函数基础上封装出一个可以满足需要的函数my_message_print

2.具体函数实现

啰嗦一堆干货如下,本实现适用于MySQL8.0及以上代码

1)在源码目录include/my_sys.h 文件最后#endif 之上添加如下声明

#define outfilename(x) strrchr(x,'/')?strrchr(x,'/')+1:xextern void debug_message_print(const char *format, ...)     MY_ATTRIBUTE((format(printf, 1,2)));#define my_message_print(format, ...) debug_message_print("\r\n\033[44;37m---->%s|%s|%d|\033[0m" format, outfilename(__FILE__), __FUNCTION__, __LINE__, ##__VA_ARGS__)