Log4j2 could not find a logging implementation with Spring Boot

43,789

Solution 1

I looked up the source code of LogManager.class and found the reason was there's no LoggerContextFactory found in log4j-provider.properties which should be found in log4j-core.jar/META-INF.
So check your log4j-core.jar/META-INF/log4j-provider.properties file , or you can delete your log4j-core.jar in your local repository.

Solution 2

It looks your dependencies are correct. This is the pom of working spring-boot application with log4j2 as logging framework:

    <!-- Spring logging -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>       

Put your log4j2.xml into resource folder for running from eclipse; if you prefer to use the different directory - resource/conf - provide the path to log4j2 configuration with JVM argument like this:

-Dlog4j.configurationFile=”conf/log4j2.xml”

Do not give up and switch back from logback to log4j2...

Solution 3

That error message is generated by the log4j-api module when it cannot find or load an implementation of its interfaces. Usually this means that the log4j-core module is missing from the classpath, but looking at your dependency graph that doesn't seem to be the case.

There are some transitive dependencies on the log4j-slf4j-impl and log4j-jul modules but I don't think that could cause the error message.

One way to investigate further is to try starting your application again with this system property set: -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE. This will print log4j internal debug logging to the console.

(Once your configuration file is loaded the StatusLogger output level can be controlled by setting <Configuration status="trace"> in the beginning of the log4j2.xml configuration file. However, the configuration file is loaded by the log4j-core module, and we're not there yet...)

Solution 4

There might be multiple reasons but common reason is you might have wrong JAR (corrupted). Delete JARs from repository and try to download again. It will solve the problem.

In my case I have deleted org folder from maven repository {home}.m2\repository\org.

I have posted similar question here. Spring boot: ERROR StatusLogger Log4j2 could not find a logging implementation

Solution 5

Adding below setting solved my issue.

-Dlog4j2.loggerContextFactory=org.apache.logging.log4j.core.impl.Log4jContextFactory
Share:
43,789
Admin
Author by

Admin

Updated on August 03, 2022

Comments

  • Admin
    Admin almost 2 years

    I'm getting this error trying to use log4j2 with spring boot.

    ERROR StatusLogger Log4j2 could not find a logging implementation. 
    Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
    

    I'm have followed this guide: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging - and also added the two log4j2-dependencies from https://logging.apache.org/log4j/2.x/maven-artifacts.html

    My dependency:tree looks like this:

    [INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @  musikkjulekalender ---
    [INFO] no.saiboten:musikkjulekalender:war:1.0-SNAPSHOT
    [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile
    [INFO] |  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
    [INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
    [INFO] |  |  \- com.fasterxml:classmate:jar:1.3.1:compile
    [INFO] |  +- org.springframework:spring-web:jar:4.3.2.RELEASE:compile
    [INFO] |  \- org.springframework:spring-webmvc:jar:4.3.2.RELEASE:compile
    [INFO] +- org.springframework.boot:spring-boot-starter-jetty:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.eclipse.jetty:jetty-servlets:jar:9.3.11.v20160721:compile
    [INFO] |  |  +- org.eclipse.jetty:jetty-continuation:jar:9.3.11.v20160721:compile
    [INFO] |  |  +- org.eclipse.jetty:jetty-http:jar:9.3.11.v20160721:compile
    [INFO] |  |  \- org.eclipse.jetty:jetty-io:jar:9.3.11.v20160721:compile
    [INFO] |  +- org.eclipse.jetty:jetty-webapp:jar:9.3.11.v20160721:compile
    [INFO] |  |  +- org.eclipse.jetty:jetty-xml:jar:9.3.11.v20160721:compile
    [INFO] |  |  \- org.eclipse.jetty:jetty-servlet:jar:9.3.11.v20160721:compile
    [INFO] |  |     \- org.eclipse.jetty:jetty-security:jar:9.3.11.v20160721:compile
    [INFO] |  +- org.eclipse.jetty.websocket:websocket-server:jar:9.3.11.v20160721:compile
    [INFO] |  |  +- org.eclipse.jetty.websocket:websocket-common:jar:9.3.11.v20160721:compile
    [INFO] |  |  |  \- org.eclipse.jetty.websocket:websocket-api:jar:9.3.11.v20160721:compile
    [INFO] |  |  +- org.eclipse.jetty.websocket:websocket-client:jar:9.3.11.v20160721:compile
    [INFO] |  |  \- org.eclipse.jetty.websocket:websocket-servlet:jar:9.3.11.v20160721:compile
    [INFO] |  \- org.eclipse.jetty.websocket:javax-websocket-server-impl:jar:9.3.11.v20160721:compile
    [INFO] |     +- org.eclipse.jetty:jetty-annotations:jar:9.3.11.v20160721:compile
    [INFO] |     |  +- org.eclipse.jetty:jetty-plus:jar:9.3.11.v20160721:compile
    [INFO] |     |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
    [INFO] |     |  +- org.ow2.asm:asm:jar:5.0.1:compile
    [INFO] |     |  \- org.ow2.asm:asm-commons:jar:5.0.1:compile
    [INFO] |     |     \- org.ow2.asm:asm-tree:jar:5.0.1:compile
    [INFO] |     +- org.eclipse.jetty.websocket:javax-websocket-client-impl:jar:9.3.11.v20160721:compile
    [INFO] |     \- javax.websocket:javax.websocket-api:jar:1.0:compile
    [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:1.4.0.RELEASE:compile
    [INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.8.9:compile
    [INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.4.0.RELEASE:compile
    [INFO] |  |  +- org.apache.tomcat:tomcat-jdbc:jar:8.5.4:compile
    [INFO] |  |  |  \- org.apache.tomcat:tomcat-juli:jar:8.5.4:compile
    [INFO] |  |  \- org.springframework:spring-jdbc:jar:4.3.2.RELEASE:compile
    [INFO] |  +- org.hibernate:hibernate-core:jar:5.0.9.Final:compile
    [INFO] |  |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
    [INFO] |  |  +- org.javassist:javassist:jar:3.20.0-GA:compile
    [INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
    [INFO] |  |  +- org.jboss:jandex:jar:2.0.0.Final:compile
    [INFO] |  |  +- dom4j:dom4j:jar:1.6.1:compile
    [INFO] |  |  |  \- xml-apis:xml-apis:jar:1.4.01:compile
    [INFO] |  |  \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile
    [INFO] |  +- org.hibernate:hibernate-entitymanager:jar:5.0.9.Final:compile
    [INFO] |  +- javax.transaction:javax.transaction-api:jar:1.2:compile
    [INFO] |  \- org.springframework:spring-aspects:jar:4.3.2.RELEASE:compile
    [INFO] +- com.h2database:h2:jar:1.4.192:compile
    [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.4.0.RELEASE:test
    [INFO] |  +- org.springframework.boot:spring-boot-test:jar:1.4.0.RELEASE:test
    [INFO] |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.4.0.RELEASE:test
    [INFO] |  +- com.jayway.jsonpath:json-path:jar:2.2.0:test
    [INFO] |  |  \- net.minidev:json-smart:jar:2.2.1:test
    [INFO] |  |     \- net.minidev:accessors-smart:jar:1.1:test
    [INFO] |  +- org.assertj:assertj-core:jar:2.5.0:test
    [INFO] |  +- org.mockito:mockito-core:jar:1.10.19:test
    [INFO] |  |  \- org.objenesis:objenesis:jar:2.1:test
    [INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:compile
    [INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
    [INFO] |  +- org.skyscreamer:jsonassert:jar:1.3.0:test
    [INFO] |  |  \- org.json:json:jar:20140107:test
    [INFO] |  +- org.springframework:spring-core:jar:4.3.2.RELEASE:compile
    [INFO] |  \- org.springframework:spring-test:jar:4.3.2.RELEASE:test
    [INFO] +- org.springframework.boot:spring-boot-starter:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.springframework.boot:spring-boot:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.0.RELEASE:compile
    [INFO] |  \- org.yaml:snakeyaml:jar:1.17:runtime
    [INFO] +- org.springframework.boot:spring-boot-starter-log4j2:jar:1.4.0.RELEASE:compile
    [INFO] |  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.6.2:compile
    [INFO] |  +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile
    [INFO] |  \- org.slf4j:jul-to-slf4j:jar:1.7.21:compile
    [INFO] +- org.apache.logging.log4j:log4j-api:jar:2.6.2:compile
    [INFO] +- org.apache.logging.log4j:log4j-core:jar:2.6.2:compile
    [INFO] +- org.apache.commons:commons-lang3:jar:3.3.2:compile
    [INFO] +- org.mongodb:mongo-java-driver:jar:2.12.4:compile
    [INFO] +- org.springframework.data:spring-data-mongodb:jar:1.9.2.RELEASE:compile
    [INFO] |  +- org.springframework:spring-tx:jar:4.3.2.RELEASE:compile
    [INFO] |  +- org.springframework:spring-context:jar:4.3.2.RELEASE:compile
    [INFO] |  +- org.springframework:spring-beans:jar:4.3.2.RELEASE:compile
    [INFO] |  +- org.springframework:spring-expression:jar:4.3.2.RELEASE:compile
    [INFO] |  +- org.springframework.data:spring-data-commons:jar:1.12.2.RELEASE:compile
    [INFO] |  \- org.slf4j:slf4j-api:jar:1.7.21:compile
    [INFO] +- com.google.api-client:google-api-client:jar:1.18.0-rc:compile
    [INFO] +- com.google.http-client:google-http-client-jackson2:jar:1.18.0-rc:compile
    [INFO] |  \- com.google.http-client:google-http-client:jar:1.18.0-rc:compile
    [INFO] +- com.google.oauth-client:google-oauth-client:jar:1.18.0-rc:compile
    [INFO] |  \- com.google.code.findbugs:jsr305:jar:1.3.9:compile
    [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.2:compile
    [INFO] |  \- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.1:compile
    [INFO] +- com.google.apis:google-api-services-oauth2:jar:v2-rev81-1.19.0:compile
    [INFO] +- com.fasterxml.jackson.core:jackson-core:jar:2.8.2:compile
    [INFO] +- org.mongodb.morphia:morphia:jar:0.107:compile
    [INFO] +- org.springframework.security:spring-security-web:jar:4.1.1.RELEASE:compile
    [INFO] |  +- aopalliance:aopalliance:jar:1.0:compile
    [INFO] |  \- org.springframework.security:spring-security-core:jar:4.1.1.RELEASE:compile
    [INFO] +- org.springframework.security:spring-security-config:jar:4.1.1.RELEASE:compile
    [INFO] |  \- org.springframework:spring-aop:jar:4.3.2.RELEASE:compile
    [INFO] +- org.springframework.social:spring-social-config:jar:1.1.4.RELEASE:compile
    [INFO] |  \- org.springframework.social:spring-social-web:jar:1.1.4.RELEASE:compile
    [INFO] |     \- javax.inject:javax.inject:jar:1:compile
    [INFO] +- org.springframework.social:spring-social-core:jar:1.1.4.RELEASE:compile
    [INFO] +- org.springframework.social:spring-social-facebook:jar:2.0.3.RELEASE:compile
    [INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.6:compile
    [INFO] |  +- org.apache.httpcomponents:httpcore:jar:4.4.5:compile
    [INFO] |  \- commons-codec:commons-codec:jar:1.10:compile
    [INFO] +- org.mockito:mockito-all:jar:1.10.8:compile
    [INFO] +- junit:junit:jar:4.11:compile
    [INFO] +- org.eclipse.jetty:apache-jsp:jar:9.3.11.v20160721:provided
    [INFO] |  +- org.eclipse.jetty:jetty-util:jar:9.3.11.v20160721:compile
    [INFO] |  +- org.eclipse.jetty:jetty-server:jar:9.3.11.v20160721:compile
    [INFO] |  +- org.eclipse.jetty.toolchain:jetty-schemas:jar:3.1:provided
    [INFO] |  +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
    [INFO] |  +- org.mortbay.jasper:apache-jsp:jar:8.0.33:provided
    [INFO] |  |  \- org.mortbay.jasper:apache-el:jar:8.0.33:provided
    [INFO] |  \- org.eclipse.jdt.core.compiler:ecj:jar:4.4.2:provided
    [INFO] +- javax.servlet:jstl:jar:1.2:compile
    [INFO] +- org.springframework.data:spring-data-jpa:jar:1.10.2.RELEASE:compile
    [INFO] |  +- org.springframework:spring-orm:jar:4.3.2.RELEASE:compile
    [INFO] |  \- org.aspectj:aspectjrt:jar:1.8.9:compile
    [INFO] +- postgresql:postgresql:jar:9.1-901-1.jdbc4:compile
    [INFO] \- joda-time:joda-time:jar:2.9.4:compile
    

    I have added the standard log4j2.xml-file to src/main/resources/config with the default config:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
      <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
          <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
      </Appenders>
      <Loggers>
        <Logger name="org.apache.log4j.xml" level="info"/>
        <Root level="debug">
          <AppenderRef ref="STDOUT"/>
        </Root>
      </Loggers>
    </Configuration>
    

    Any guesses? I've tried running from within Spring Tool Suite and with the maven spring-boot plugin.

    By popular request, here is the complete pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.0.RELEASE</version>
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>no.saiboten</groupId>
        <artifactId>musikkjulekalender</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>Musikkjulekalender</name>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jetty</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                 <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
         <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.6.2</version>
          </dependency>
          <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.6.2</version>
          </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
                <version>2.12.4</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-mongodb</artifactId>
            </dependency>
            <dependency>
                <groupId>com.google.api-client</groupId>
                <artifactId>google-api-client</artifactId>
                <version>1.18.0-rc</version>
            </dependency>
            <dependency>
                <groupId>com.google.http-client</groupId>
                <artifactId>google-http-client-jackson2</artifactId>
                <version>1.18.0-rc</version>
            </dependency>
            <dependency>
                <groupId>com.google.oauth-client</groupId>
                <artifactId>google-oauth-client</artifactId>
                <version>1.18.0-rc</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.2</version>
            </dependency>
            <dependency>
                <groupId>com.google.apis</groupId>
                <artifactId>google-api-services-oauth2</artifactId>
                <version>v2-rev81-1.19.0</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.8.2</version>
            </dependency>
            <dependency>
                <groupId>org.mongodb.morphia</groupId>
                <artifactId>morphia</artifactId>
                <version>0.107</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.social</groupId>
                <artifactId>spring-social-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.social</groupId>
                <artifactId>spring-social-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.social</groupId>
                <artifactId>spring-social-facebook</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.3.6</version>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-all</artifactId>
                <version>1.10.8</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
            <dependency>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>apache-jsp</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.1-901-1.jdbc4</version>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.9.4</version>
            </dependency>
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <useSystemClassLoader>false</useSystemClassLoader>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <repositories>
            <repository>
                <id>spring-releases</id>
                <name>Spring Releases</name>
                <url>https://repo.spring.io/libs-release</url>
            </repository>
            <repository>
                <id>org.jboss.repository.releases</id>
                <name>JBoss Maven Release Repository</name>
                <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
            </repository>
        </repositories>
    
        <pluginRepositories>
            <pluginRepository>
                <id>spring-releases</id>
                <name>Spring Releases</name>
                <url>https://repo.spring.io/libs-release</url>
            </pluginRepository>
        </pluginRepositories>
    
    </project>
    
  • Karl
    Karl about 6 years
    Thanks that got it,. In my case I was using the sbt-assembly plugin with a MergeStrategy that discarded stuff under META-INF, I had to refine it a little to let log4j-provider.properties remain in the uber-jar's META-INF dir
  • alexP_Keaton
    alexP_Keaton about 6 years
    This just fixed a few hours for me. Thanks
  • Marc Carré
    Marc Carré about 6 years
    @user2056182, would you mind sharing how you refined it? I am also using the sbt-assembly plugin, and can't seem to have it work fine.
  • Marc Carré
    Marc Carré almost 6 years
    Managed to get things to work by reducing the scope of the rules in assemblyMergeStrategy and simply having case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard. See also: github.com/marccarre/log4j2-sbt-assembly
  • joseph
    joseph almost 5 years
    My log4j-core.jar has that properties file, but I still get the error. for i in find ~/.m2/repository | grep log4j-core | grep -E 'jar$' | grep 2.6.2; do echo $i; unzip -l $i | grep log4j-provider.properties; done 2.6.2/log4j-core-2.6.2.jar 904 07-05-2016 19:36 META-INF/log4j-provider.properties 2.6.2/log4j-core-2.6.2-javadoc.jar 2.6.2/log4j-core-2.6.2-sources.jar 904 07-05-2016 19:36 META-INF/log4j-provider.properties