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)