thubbo / jmeter-plugins-for-apache-dubbo

Dubbo Plugin for Apache JMeter, It is a plug-in developed for testing Dubbo in Jmeter.
Apache License 2.0
565 stars 290 forks source link

集成到jmeter maven插件异常Slf4jLogkitLogger overrides final method log #139

Closed erstens closed 3 years ago

erstens commented 3 years ago

异常信息:

2021-01-11 11:48:48,661 DEBUG o.a.j.g.t.JMeterTreeListener: value changed, updating currentPath
2021-01-11 11:48:48,921 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,924 DEBUG o.a.j.g.a.CheckDirty: Node is class: class org.apache.jmeter.gui.tree.JMeterTreeNode
2021-01-11 11:48:48,925 DEBUG o.a.j.g.a.CheckDirty: Node is class: class org.apache.jmeter.gui.tree.JMeterTreeNode
2021-01-11 11:48:48,926 DEBUG o.a.j.g.GuiPackage: Updating current node 测试计划
2021-01-11 11:48:48,926 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,927 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:48:48,927 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:48:48,929 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,930 DEBUG o.a.j.g.GuiPackage: Updating current node 测试计划
2021-01-11 11:48:48,930 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,932 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:48:48,932 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:48:48,933 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,934 DEBUG o.a.j.g.GuiPackage: Updating gui to new node
2021-01-11 11:48:48,940 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,0x0,invalid,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:48:48,976 ERROR o.a.j.g.u.MenuFactory: Error initializing menus, check configuration if using 3rd party libraries
java.lang.VerifyError: class org.apache.jorphan.logging.Slf4jLogkitLogger overrides final method log.(Lorg/apache/log/Priority;Ljava/lang/String;Ljava/lang/Throwable;)V
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_231]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_231]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_231]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[?:1.8.0_231]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_231]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_231]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_231]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_231]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_231]
    at io.github.ningyu.jmeter.plugin.dubbo.gui.DubboDefaultConfigGui.<clinit>(DubboDefaultConfigGui.java:35) ~[jmeter-plugins-dubbo-2.7.7.jar:?]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_231]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_231]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_231]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_231]
    at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:207) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:151) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:107) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:94) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:184) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:87) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:69) ~[ApacheJMeter_core-5.4.jar:5.4]
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) ~[?:1.8.0_231]
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_231]
    at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) ~[?:1.8.0_231]
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) ~[?:1.8.0_231]
    at java.awt.Dialog.show(Dialog.java:1084) ~[?:1.8.0_231]
    at java.awt.Component.show(Component.java:1671) ~[?:1.8.0_231]
    at java.awt.Component.setVisible(Component.java:1623) ~[?:1.8.0_231]
    at java.awt.Window.setVisible(Window.java:1014) ~[?:1.8.0_231]
    at java.awt.Dialog.setVisible(Dialog.java:1005) ~[?:1.8.0_231]
    at org.apache.jmeter.SplashScreen.lambda$showScreen$0(SplashScreen.java:95) ~[ApacheJMeter_core-5.4.jar:5.4]
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) [?:1.8.0_231]
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) [?:1.8.0_231]
    at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) [?:1.8.0_231]
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_231]
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_231]
2021-01-11 11:48:48,991 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]
java.lang.VerifyError: class org.apache.jorphan.logging.Slf4jLogkitLogger overrides final method log.(Lorg/apache/log/Priority;Ljava/lang/String;Ljava/lang/Throwable;)V
    at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_231]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_231]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_231]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[?:1.8.0_231]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_231]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_231]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_231]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_231]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_231]
    at io.github.ningyu.jmeter.plugin.dubbo.gui.DubboDefaultConfigGui.<clinit>(DubboDefaultConfigGui.java:35) ~[jmeter-plugins-dubbo-2.7.7.jar:?]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_231]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_231]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_231]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_231]
    at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:207) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:151) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:107) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:94) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:184) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:87) ~[ApacheJMeter_core-5.4.jar:5.4]
    at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:69) ~[ApacheJMeter_core-5.4.jar:5.4]
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) ~[?:1.8.0_231]
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_231]
    at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) ~[?:1.8.0_231]
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) ~[?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233) ~[?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233) ~[?:1.8.0_231]
    at java.awt.Dialog.show(Dialog.java:1084) ~[?:1.8.0_231]
    at java.awt.Component.show(Component.java:1671) ~[?:1.8.0_231]
    at java.awt.Component.setVisible(Component.java:1623) ~[?:1.8.0_231]
    at java.awt.Window.setVisible(Window.java:1014) ~[?:1.8.0_231]
    at java.awt.Dialog.setVisible(Dialog.java:1005) ~[?:1.8.0_231]
    at org.apache.jmeter.SplashScreen.lambda$showScreen$0(SplashScreen.java:95) ~[ApacheJMeter_core-5.4.jar:5.4]
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) [?:1.8.0_231]
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) [?:1.8.0_231]
    at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_231]
    at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_231]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_231]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) [?:1.8.0_231]
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_231]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_231]
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_231]
2021-01-11 11:49:41,483 DEBUG o.a.j.g.GuiPackage: Updating current node 测试计划
2021-01-11 11:49:41,485 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,839x671,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 11:49:41,485 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:49:41,486 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 11:49:41,486 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,839x671,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 13:41:27,287 DEBUG o.a.j.g.GuiPackage: Updating current node 测试计划
2021-01-11 13:41:27,288 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,827x497,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]
2021-01-11 13:41:27,288 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 13:41:27,289 DEBUG o.a.j.g.AbstractJMeterGuiComponent: setting element to enabled: true
2021-01-11 13:41:27,289 DEBUG o.a.j.g.GuiPackage: Gui retrieved = org.apache.jmeter.control.gui.TestPlanGui[测试计划,0,0,827x497,layout=java.awt.BorderLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@71dae305,flags=9,maximumSize=,minimumSize=,preferredSize=]

环境 下面是pom文件中的配置

<plugins>
            <plugin>
                <groupId>com.lazerycode.jmeter</groupId>
                <artifactId>jmeter-maven-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <!-- Generate JMeter configuration -->
                    <execution>
                        <id>configuration</id>
                        <goals>
                            <goal>configure</goal>
                        </goals>
                    </execution>
                    <!-- Run JMeter tests -->
                    <execution>
                        <id>jmeter-tests</id>
                        <goals>
                            <goal>jmeter</goal>
                        </goals>
                    </execution>
                    <!-- Fail build on errors in test -->
                    <!--<execution>
                        <id>jmeter-check-results</id>
                        <goals>
                            <goal>results</goal>
                        </goals>
                    </execution>-->
                </executions>

                <configuration>

                    <jmeterExtensions>

            <artifact>io.metersphere:jmeter-plugins-dubbo:2.7.7</artifact>

                    </jmeterExtensions>
                </configuration>
            </plugin>

        </plugins>

原因定位 报错信息能看出是init的时候

public class DubboDefaultConfigGui extends AbstractConfigGui {
    private static final Logger log = LoggingManager.getLoggerForClass();
.....................
}

我这里jmeter maven插件默认使用的jmeter版本是5.4,因此方法追踪到LoggingManager.getLoggerForClass

public static Logger getLoggerForClass() {
        String className = (new Exception()).getStackTrace()[1].getClassName();
        return new Slf4jLogkitLogger(LoggerFactory.getLogger(className));
    }

对比3.0版本以前的LoggingManager.getLoggerForClass

public static org.apache.log.Logger getLoggerForClass() {
        String className = (new Exception()).getStackTrace()[1].getClassName();
        return Hierarchy.getDefaultHierarchy().getLoggerFor(removePrefix(className));
    }

这里说明一下,LoggingManager官方已经不用了,改成log4j了 Slf4jLogkitLogger 在new的时候就已经异常了,异常方法是log方法,这个log方法来自父类org.apache.log.Logger 经排查,而org.apache.log.Logger在logkit中,并且其实是由于ApacheJMeter_core-5.4.jar的版本带来的,logkit中的 org.apache.log.Logger log方法是final类型

综上,请问在使用maven的情况下,是否有兼容高版本的jmeter办法?

ningyu1 commented 3 years ago

@erstens 非常欢迎你改后能提pull request 😊

erstens commented 3 years ago

感谢作者及时回复,看来没有现成的解决办法,待我有解决办法时,会及时同步。

erstens commented 3 years ago

已经解决了,直接用的dependencies.jar包。