LinShunKang/MyPerf4J

启动失败: java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "org/apache/logging/log4j/core/pattern/AnsiEscape"

bingjava opened this issue · 1 comments

Bug 描述
添加attach后,启动程序时报linkedError
运行环境
1、JDK 版本号:jdk1.8.121
2、运行容器和框架:java main方法运行
3、操作系统:MacOS

配置文件
AppName=log4j2-test
MetricsProcessorType=1
MethodMetricsFile=/Users/lly/Desktop/log4j2-metric/method_metrics.log
ClassMetricsFile=/Users/lly/Desktop/log4j2-metric/class_metrics.log
GCMetricsFile=/Users/lly/Desktop/log4j2-metric/gc_metrics.log
MemMetricsFile=/Users/lly/Desktop/log4j2-metric/memory_metrics.log
BufPoolMetricsFile=/Users/lly/Desktop/log4j2-metric/buf_pool_metrics
ThreadMetricsFile=/Users/lly/Desktop/log4j2-metric/thread_metrics.log
FileDescMetricsFile=/Users/lly/Desktop/log4j2-metric/file_desc_metrics.log
CompilationMetricsFile=/Users/lly/Desktop/log4j2-metric/compilation_metrics.log
MethodMilliTimeSlice=1000
JvmMilliTimeSlice=1000
IncludePackages=org.apache.logging.log4j.core.;com.lmax.disruptor.;org.apache.logging.log4j.perf.single.*;cn.perf4j.demo1.[p1,p2,p3]

异常堆栈
2020-05-13 18:55:22.961 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/DatePrinter, classBeingRedefined, protectionDomain, 921)...
2020-05-13 18:55:22.962 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/Format, classBeingRedefined, protectionDomain, 1344)...
2020-05-13 18:55:22.963 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FormatCache, classBeingRedefined, protectionDomain, 5222)...
2020-05-13 18:55:22.964 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FastDatePrinter, classBeingRedefined, protectionDomain, 16230)...
2020-05-13 18:55:22.971 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FastDateParser, classBeingRedefined, protectionDomain, 14553)...
2020-05-13 18:55:22.980 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/pattern/AnsiEscape, classBeingRedefined, protectionDomain, 6257)...
Exception in thread "main" java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "org/apache/logging/log4j/core/pattern/AnsiEscape"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.logging.log4j.core.pattern.HighlightConverter.(HighlightConverter.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:583)
at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:639)
at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:415)
at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:177)
at org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder.build(PatternLayout.java:377)
at org.apache.logging.log4j.core.layout.PatternLayout.(PatternLayout.java:129)
at org.apache.logging.log4j.core.layout.PatternLayout.(PatternLayout.java:59)
at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:660)
at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:517)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.async.AsyncLoggerContext.start(AsyncLoggerContext.java:76)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at org.apache.logging.log4j.perf.Tester.main(Tester.java:39)

你好,我没有复现你的问题。请问:
1、MyPerf4J 的版本号?
2、log4j 和 slf4j-api 的版本号是多少?

以下是我所使用的 log4j 和 slfj-api 的依赖:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <version>2.13.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.2</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.13.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.2</version>
        </dependency>