GithubHelp home page GithubHelp logo

kookob / mybatis-log-plugin Goto Github PK

View Code? Open in Web Editor NEW
363.0 11.0 149.0 78 KB

Restore mybatis sql log to original whole executable sql.

Home Page: https://plugins.jetbrains.com/plugin/13905-mybatis-log-plugin

License: Other

Java 100.00%
intellij-plugin mybatis mybatis-log

mybatis-log-plugin's Issues

sql log 控制台遮挡database console 输出

sql log的控制台窗口的优先级比自带的database console优先级更高;

1.ctrl+shift+alt+o 呼出mybatis sql log console
2.输出解析的sql
3.idea db插件执行sql,explain
4.explain结果显示在database console中,但是被sql log console遮挡住

无法自动识别sql

项目启动或者debug,插件都识别不出sql。但手工进行转换可以。

sql print twice

when i execute one sql command,the plugin print sql twice
20191227095538
20191227095558

SQL太长被截断

原SQL语句的长度大概7200个字符,使用 Restore sql from text 功能格式化SQL的时候,输出的结果只有1800多个字符了,后面的字符都被截断了。

无法捕获

日志满足你所说的有:Preparing和Parameters,但插件无任何输出。

插件不起作用

Mybatis sql log如图

没有将“?”进行恢复

log 日志

sql打印log已包含"Preparing:"和"Parameters:"
按照动图示例,选中console的sql日志,右击 "Restore Sql from Selection"还是不能还原

Restore Sql from Selection进行还原

更新到2018.2.5存在的一些问题

大概作者已经发现这些小问题了,期待下一次更新

IDEA 版本:2018.2.5
插件版本:2.0.6

启用插件后在 Run Dashboard 中输出的日志不能自动滚动(Scroll to the end 失效)

异常信息类名无高亮显示,不可点击跳转定位。

禁用插件后恢复正常。

多线程打印SQL异常

多个线程输出mybatis日志时,SQL语句错位。
日志输出顺序:
thread1: Preparing
thread2: Preparing
thread1: Parameters
thread2: Parameters

无法获取SQL

之前还可以捕捉到SQL,使用很好。今天突然不能用了,如下图:

qq 20181010112529

这样的格式识别不出来

这样的格式识别不出来

2018-04-18 13:43:55
[DEBUG]-[Thread: http-apr-8080-exec-2]-[org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug()]: ==>  Preparing: SELECT count(0) FROM p_ordrer WHERE 1 = 1 AND user_id = ? AND is_delete != 1 AND order_status = ? AND logistic_status = ? 

2018-04-18 13:43:55
[DEBUG]-[Thread: http-apr-8080-exec-2]-[org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug()]: ==> Parameters: 1(String), W(String), LW(String)

点击Close后抛出NPE

IDEA 版本:2018.2.3
插件版本:2.0.4

程序运行期间,点击 Close 关闭 mybatis-log 的窗口后抛出 NPE

异常信息:

update failed for ActionGroup: Format Sql (Format Sql)[Format Sql]

java.lang.NullPointerException
	at mybatis.log.MyBatisLogConfig.getConfigVo(MyBatisLogConfig.java:23)
	at mybatis.log.tail.TailContentExecutor$FormatAction.isSelected(TailContentExecutor.java:248)
	at com.intellij.openapi.actionSystem.ToggleAction.update(ToggleAction.java:65)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareUpdate(ActionUtil.java:136)
	at com.intellij.openapi.actionSystem.impl.Utils.doUpdate(Utils.java:256)
	at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:199)
	at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.updateActionsImpl(ActionToolbarImpl.java:1100)
	at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.access$000(ActionToolbarImpl.java:53)
	at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl$2.updateActionsImpl(ActionToolbarImpl.java:175)
	at com.intellij.openapi.actionSystem.impl.ToolbarUpdater$MyUpdateRunnable.run(ToolbarUpdater.java:186)
	at com.intellij.openapi.actionSystem.impl.ToolbarUpdater.updateActions(ToolbarUpdater.java:101)
	at com.intellij.openapi.actionSystem.impl.ToolbarUpdater.updateActions(ToolbarUpdater.java:93)
	at com.intellij.openapi.actionSystem.impl.ActionToolbarImpl.updateActionsImmediately(ActionToolbarImpl.java:1093)
	at com.intellij.openapi.actionSystem.impl.ActionButton.performAction(ActionButton.java:163)
	at com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:388)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2237)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2295)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4526)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
	at java.awt.Container.dispatchEventImpl(Container.java:2281)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:781)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:718)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

虽然此异常并不影响使用~

IDEA 2019版本支持吗?

IDEA 2018.03的时候还可以用,最近更新到2019版本了,什么都打印不出来了,不知道为什么

日期类型参数,输出后的sql无法执行,oracle数据库

生成的sql语句 截取部分
AND ts.order_date >= '2019-03-10 00:00:00.0'
AND ts.order_date < '2019-04-10 23:59:59.0'

执行报错
ORA-01861: literal does not match format string

转换后可执行
AND ts.order_date >= to_date('2019-03-10 00:00:00' , 'yyyy-mm-dd hh24:mi:ss')
AND ts.order_date < to_date('2019-04-10 23:59:59' , 'yyyy-mm-dd hh24:mi:ss')

oracle版本
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

IntelliJ IDEA 2019.3.2 Unable Running

IntelliJ IDEA 2019.3.2 (Ultimate Edition)

java.lang.Throwable: Runner MyBatisLogPlugin is not registered
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
at com.intellij.execution.ui.RunContentManagerImpl.getContentManagerForRunner(RunContentManagerImpl.java:472)
at com.intellij.execution.ui.RunContentManagerImpl.showRunContent(RunContentManagerImpl.java:260)
at com.intellij.execution.ui.RunContentManagerImpl.showRunContent(RunContentManagerImpl.java:252)
at mybatis.log.tail.TailContentExecutor.run(TailContentExecutor.java:153)
at mybatis.log.action.ShowLogInConsoleAction.showLogInConsole(ShowLogInConsoleAction.java:59)
at mybatis.log.action.TailMyBatisLog.actionPerformed(TailMyBatisLog.java:16)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:298)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:315)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:294)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:263)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:107)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:116)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:401)
at java.desktop/javax.swing.AbstractButton.doClick(AbstractButton.java:369)
at java.desktop/com.apple.laf.ScreenMenuItemCheckbox.itemStateChanged(ScreenMenuItemCheckbox.java:198)
at java.desktop/java.awt.CheckboxMenuItem.processItemEvent(CheckboxMenuItem.java:396)
at java.desktop/java.awt.CheckboxMenuItem.processEvent(CheckboxMenuItem.java:364)
at java.desktop/java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:375)
at java.desktop/java.awt.MenuComponent.dispatchEvent(MenuComponent.java:363)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Can't restore sql from selection

IDEA 2018.1.4
插件版本:2.0.7
开发环境:Mybatis 3.4.6+Mybatis Plus 3.0.6+log4j2 2.11.1

配置Mybatis的日志为LOG4J2,并向控制台输出
1
2

run/debug 工具条中的 插件图标无法移除

IntelliJ IDEA 2018.1.1 (Ultimate Edition)
Build #IU-181.4445.78, built on April 10, 2018
macOS 10.13.4

image
image
插件的这个图标即使从设置里面删除掉,界面上还是存在,而且很明显,这个插件的图标兼容性是存在问题的,移动这个图标的位置会导致界面显示的异常。

提issue的注意事项

大家提交issue时,如果有涉及到日志输出相关的,麻烦把当时的控制台输出内容一并粘贴上来,方便排查问题,如果没有及时粘粘,过后再重现当时的输出可能就不那么方便了。

涉及到的敏感内容,相应的做下替换

不支持sql中含有中文

当sql中含有中文,例如 :CASE WHEN status = 'REFUSE' THEN '拒绝' 时替换出来的sql是把 '拒绝' 替换成了参数

SQL太长被截断

原SQL语句的长度大概7200个字符,使用 Restore sql from text 功能格式化SQL的时候,输出的结果只有1800多个字符了,后面的字符都被截断了。

SQL来源只能是控制台输出吗

首先很喜欢作者的这个插件,本地调试很方便,但是我更多的痛点问题是把项目发布到服务器上,sql都在日志里,作者能否提供一个输入框让我直接粘贴进来?

最后先给个star,持续关注下

当SQL有换行的时候会提示SQL错误

[DEBUG][2018/04/09 17:38:04][http-nio-7001-exec-7] (BaseJdbcLogger.java:159) - ==> Preparing: insert into sql_execute_fact ( hash_code, sql_scripts, sql_type, execute_time, result_size, created_at ) values ( ?, ?, ?, ?, ?, ? )
[DEBUG][2018/04/09 17:38:04][http-nio-7001-exec-7] (BaseJdbcLogger.java:159) - ==> Parameters: d26e232643e79e6dd00f73a3dc770684(String), H4sIAAAAAAAAAIWMywrCMBBFf+XuWiHgY+vHDDGMTcGZSDIx5u+rhSKC4PJezjmFbxwMpcqo3Cjz
RFplB1/QD+7rb7NFeg9jLx/q6PAH2/+snxxC0uCNWhmHwcEiU2efHYSCknrhlXwC15wEW+FlPTgb
ppzqHZe+ipLU4nkBWJrAG84AAAA=(String), 0(Integer), 62(Long), 442(Long), 2018-04-09 17:38:04.761(Timestamp)

image

154 restore sql from selection - ==>
insert into sql_execute_fact ( hash_code, sql_scripts, sql_type, execute_time, result_size, created_at ) values ( 'd26e232643e79e6dd00f73a3dc770684', H4sIAAAAAAAAAIWMywrCMBBFf+XuWiHgY+vHDDGMTcGZSDIx5u+rhSKC4PJezjmFbxwMpcqo3Cjz, error, error, error, error );
---This is an error sql!---

image

谢谢 ^_^

支持格式不全

可能是因为版本问题吧,我这里输出的不是Preparing:和Executing:
而是Preparing Statement:和Executing Statement:
是否能支持一下呢。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.