You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Pavel_K (JIRA)" <ji...@apache.org> on 2018/11/01 19:15:00 UTC
[jira] [Commented] (LOG4J2-2463) ClassNotFoundException when log4j2
is used with slf4j on module path in java 11
[ https://issues.apache.org/jira/browse/LOG4J2-2463?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16672056#comment-16672056 ]
Pavel_K commented on LOG4J2-2463:
---------------------------------
[~ralph.goers@dslextreme.com] I found out the error. When we use JPMS services we must provide services only via module-info. Services in META-INF/services will not work correctly, although JPMS will find them (for example there will be ClassNotFoundException). So we need to export `org.slf4j.spi.SLF4JServiceProvider` from `log4j-slf4j18-impl-2.11.1.jar` in JPMS manner - via module-info. So, `log4j-slf4j18-impl-2.11.1.jar` must have such module-info:
{code:java}
module org.apache.logging.log4j.slf4j {
requires org.slf4j;
requires static slf4j.ext;
requires org.apache.logging.log4j;
requires org.apache.logging.log4j.core;
provides org.slf4j.spi.SLF4JServiceProvider with org.apache.logging.slf4j.SLF4JServiceProvider;
}
{code}
Besides we need to use for log4j-slf4j18-impl-2.11.1.jar another version of slf4j - version 1.8.0-beta2. But, there will be one compilation error because of the error in SLF4J. As it can be seen from the above module-info it requires slf4j.ext, but both slf4j.ext and org.slf4j export package `org.slf4j`. Now I will write to them about it.
> ClassNotFoundException when log4j2 is used with slf4j on module path in java 11
> -------------------------------------------------------------------------------
>
> Key: LOG4J2-2463
> URL: https://issues.apache.org/jira/browse/LOG4J2-2463
> Project: Log4j 2
> Issue Type: Bug
> Affects Versions: 2.11.0
> Reporter: Pavel_K
> Assignee: Ralph Goers
> Priority: Major
> Attachments: log4j-slf4j-jdk11.zip
>
>
> In order to use log4j2 with slf4j I use the following jars on my module path:
> {code:java}
> slf4j-api-1.7.25.jar
> log4j-slf4j-impl-2.11.0.jar
> log4j-core-2.11.0.jar
> log4j-api-2.11.0.jar
> {code}
> However, I get
> {code:java}
> Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/AbstractLoggerAdapter
> at java.base/java.lang.ClassLoader.defineClass1(Native Method)
> at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
> at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
> at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:206)
> at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:760)
> at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:681)
> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:606)
> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
> at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
> at org.apache.logging.log4j.slf4j.impl@2.11.0/org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:36)
> at slf4j.api@1.7.25/org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
> at slf4j.api@1.7.25/org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
> at slf4j.api@1.7.25/org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
> at slf4j.api@1.7.25/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
> at slf4j.api@1.7.25/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
> at com.noname.alpha.core/com.noname.alpha.core.internal.Launcher.<clinit>(Launcher.java:38)
> Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.spi.AbstractLoggerAdapter
> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
> at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
> ... 17 more
> {code}
> The problem is solved when I delete log4j-api-2.11.0.jar/META-INF/versions/9/module-info.class file
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)