Mybatis Log Parser

问题场景

不知道你们是否有以下场景,项目使用Mybatis,配置了控制台输出SQL

 10:39:14.750 DEBUG 1 --- [or-http-epoll-3] c.c.s.g.d.P.getIamOrganizationRelEnabled : ==>  Preparing: SELECT is_enabled FROM iam_user_organization_rel WHERE organization_id = ? and user_id = ?
2020-07-20 10:39:14.750 DEBUG 1 --- [or-http-epoll-3] c.c.s.g.d.P.getIamOrganizationRelEnabled : ==> Parameters: 186(Long), 1519(Long)
2020-07-20 10:39:14.751 DEBUG 1 --- [or-http-epoll-3] c.c.s.g.d.P.getIamOrganizationRelEnabled : <==      Total: 1
2020-07-20 10:39:14.752 DEBUG 1 --- [or-http-epoll-3] c.c.c.s.g.d.P.selectProjectsByUserId     : ==>  Preparing: select source_id from iam_member_role where member_id = ? and member_type = 'user' and source_type = 'project'
2020-07-20 10:39:14.752 DEBUG 1 --- [or-http-epoll-3] c.c.c.s.g.d.P.selectProjectsByUserId     : ==> Parameters: 1519(Long)
2020-07-20 10:39:14.763 DEBUG 1 --- [or-http-epoll-3] c.c.c.s.g.d.P.selectProjectsByUserId     : <==      Total: 31

当我们想调试的时候,还需要把预编译SQL转换成可执行SQL;当时我找到了一款IDEA 插件:mybatis-log-plugin

很快,问题来了

插件后面只能转换本地控制台打印的日志,当我在服务器或者k8s查看pod日志时,不能满足需求了。

造轮子

因为没有找到满足场景的工具,因此自己写了一个

快速开始

目前提供了Docker方式

docker run --name mybatis-log-parser -p 8080:8080 -d zhituanbox/mybatis-log-parser:1.0

运行之后IP:PORT

使用

首页

7febf4b33e564f097e0fe12b06e2ba4f.png
首页

支持文件或者文本方式

此处有两种风格可选,只查看SQL推荐风格A想根据日志挑选SQL推荐风格B

风格A

2b9c75cb77c462c4e7c9883bcabe9a60.png
风格A页面

只展示解析出来的SQL,有的Preparing SQL需要两个参数,查找到Parameters参数有多个符合的,按照行数最相近的展示,通常选第一个就对了!

风格B

a3e82b8affd81de5eafbca0819bc05bc.png
风格B页面

此处会将日志原封不动的展示出来,点击对应Preparing SQL对应的前面的行号数字

多个SQL规则同上

ed3ce3bace47b012e988c551d7f7f341.png
风格B页面解析结果
fe302e096f5d481c299a047a9caa7758.gif
风格B页面功能GIF

后续考虑优化

风格A界面优化

风格A界面目前只是能用,展示和交互都还太差了

风格B界面交互优化

点击前面的行号数字很容易点错

后续考虑光标所在行,直接按快捷键

性能优化

日志行数较多情况下,解析较慢

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐