几行代码给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:x
extern 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__)
该声明主要功能定义输出日志的头包含打印日志所在文件、所在函数、所在行数。同时为了便于查看加入终端实时输出时日志的颜色区分,以及从行首覆盖输出的设置。
2)在源码目录mysys/my_error.cc文件内最后追加以下函数
void debug_message_print(const char *format, ...) {
va_list args;
char ebuff[ERRMSGSIZE];
DBUG_TRACE;
enum loglevel level = WARNING_LEVEL;
va_start(args, format);
(void)vsnprintf(ebuff, sizeof(ebuff), format, args);
va_end(args);
my_message_local(level,EE_DEBUG_INFO,ebuff);
3.编译调用
编译成功终于就可以自由输出了!
调用:
在需要输出的代码内添加类似:my_message_print("%d,%s%xxxxx......",看看参数a,看看参数b,xxxxx,....); 来输出感兴趣的参数内容。
在sql_yacc.yy之中也可以使用呦。
例如在sql_yacc.yy中感兴趣代码位置添加日志输出:
my_message_print(">>>>>>>>>>>>>>>>>>>我是查询");
my_message_print(">>>>>>>>>>>>>>>>>>>查询表[%s]",$1.str);
实时查看
Linux或Mac环境小伙伴可以通过终端执行命令:tail -f mysql.log 来实时监控查看到日志的输出。
编译并执行查询语句,tail -f mysql.log实时查看mysql.log文件
即可看到输出如:
---->sql_yacc.yy|MYSQLparse|16799|>>>>>>>>>>>>>>>>>>>查询表[test1].
---->sql_yacc.yy|MYSQLparse|10570|>>>>>>>>>>>>>>>>>>>我是查询.
分类
标签
已于2022-8-10 17:28:28修改
收藏
回复
删除帖子
回复
添加资源
相关推荐
-
Flutter
给
iOS数字键盘
增加
完成按钮
lazihuman
• 2.0w浏览
• 0回复
-
鸿蒙应用开发必备技能:打印
输出
日志
【经验分享】
ZZR老师
• 1.4w浏览
• 3回复
-
如何确认示例真的
输出
了“Hello World”
鲸余
• 1.0w浏览
• 0回复
-
简化的鸿蒙WiFi接口,仅需
几行
代码
,简单易用!
许思维
• 2.0w浏览
• 7回复
-
HarmonyOS环境搭建遇到的坑,分享
给
大家
软通小精灵
• 2.2w浏览
• 15回复
-
【答疑汇总】HarmonyOS分布式技术实现的影音多设备
实时
共享
夏曹俊
• 1.9w浏览
• 5回复
-
赏金猎人APP开发
日志
BLUESKYHOST
• 1.1w浏览
• 6回复
-
为自己的鸿蒙卡片
增加
编辑能力
droidzxy
• 8767浏览
• 3回复
-
GPS模块分析之on
函数
挖墙脚的农民工
• 9244浏览
• 3回复
-
定位模块之getAddressesFromLocation
函数
解析
挖墙脚的农民工
• 6775浏览
• 3回复
-
干货 | ELK
日志
实时
分析实战
r660926
• 3691浏览
• 0回复
-
#夏日挑战赛#记一次
给
OpenHarmony成功提交
代码
的过程
鸿蒙坚果派
• 6963浏览
• 5回复
-
几行
代码
搞定 Spring Cloud OAuth2 授权码模式3个页面定制
xawind
• 4500浏览
• 0回复
-
Jchardet——支持检测并
输出
文件编码方式的组件
OpenHarmony开发者
• 5259浏览
• 3回复
-
MySQL
源码分析之SQL
函数
执行
fifalv
• 3040浏览
• 0回复
-
MySQL
聚合
函数
初探
singerhowe
• 1378浏览
• 0回复
-
一款
给
日志
打标签实现精确定位的
日志
切面利器
gnt_xxy
• 3399浏览
• 0回复
-
使用 Vector 将 PostgreSQL
日志
输出
为 Prometheus 指标
pivoteic
• 1748浏览
• 0回复
-
十
几行
代码
实现分布式session + 秒测登录接口
我欲只争朝夕
• 420浏览
• 0回复
帖子
视频