title: How to set up Spring Boot and log4j2 properly?
body: <p>How can I make Spring log properly via <code>log4j2</code> along with the other dependencies I have (Hibernate, Netty, Mina, etc.)?</p>
  
  <p>I tried many different thins and dependency combinations. But I either can get Spring to log and nothing else, or everything but Spring.</p>
  
  <p>With all dependecies logging properly (but Spring) I get the following error:</p>
  
  <pre><code>java.lang.NoSuchMethodError: org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(Lorg/apache/logging/log4j/core/config/ConfigurationSource;)Lorg/apache/logging/log4j/core/config/Configuration;
          at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadConfiguration(Log4J2LoggingSystem.java:167)
          at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.loadDefaults(Log4J2LoggingSystem.java:150)
          at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:75)
          at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:50)
          at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.initialize(Log4J2LoggingSystem.java:140)
          at org.springframework.boot.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:277)
          at org.springframework.boot.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:255)
          at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:224)
          at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:200)
          at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
          at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
          at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121)
          at org.springframework.boot.context.event.EventPublishingRunListener.publishEvent(EventPublishingRunListener.java:111)
          at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:65)
          at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
          at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:329)
          at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
          at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185)
          at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174)
          at com.myproject.MyProject.main(MyProject.java:XX)
  </code></pre>
  
  <h2>This is my <code>build.gradle</code> dependencies</h2>
  
  <pre><code>dependencies {
      // FIX engine
      compile 'org.quickfixj:quickfixj-all:1.6.2'
      compile 'org.apache.mina:mina-core:2.0.16'
  
      // Web API
      compile ('org.springframework.boot:spring-boot-starter-web:1.4.1.RELEASE') {
          // Remove default Spring loggers (where logback takes precedence)
          exclude module: 'spring-boot-starter-logging'
      }
  
      // Logging
      compile 'org.apache.logging.log4j:log4j-api:2.7'
      compile 'org.apache.logging.log4j:log4j-core:2.7'
      compile 'commons-logging:commons-logging:1.2' // for Spring logging
      compile 'org.apache.logging.log4j:log4j-web:2.7' // for Spring logging
      compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.7' // for Hibernate logging
  
      // ORM and Database Driver
      compile 'org.hibernate:hibernate-core:5.2.4.Final'
      compile 'org.postgresql:postgresql:9.4.1209'
  
      // Key-value store
      compile 'biz.paluch.redis:lettuce:4.1.2.Final'
  
      // Testing
      // The Groovy language
      compile 'org.codehaus.groovy:groovy-all:2.4.6'
      // Spock testing framework
      testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
  }
  </code></pre>
  
  <p>Then, getting rid of my logging dependencies and adding the dependecy below:</p>
  
  <pre><code> compile 'org.springframework.boot:spring-boot-starter-log4j2:1.4.1.RELEASE'
  </code></pre>
  
  <p>Spring logging will work, but the other deps logging will not.</p>
  
  <h2>This is the <code>main</code> method (nothing special)</h2>
  
  <pre><code>    public static void main(String[] args) {
          // Fine tune a few logging settings so they don't log with TRACE or DEBUG levels.
          Configurator.setLevel("org.hibernate", Level.ERROR);
          Configurator.setLevel("org.jboss", Level.ERROR);
          Configurator.setLevel("org.apache.mina", Level.ERROR);
          Configurator.setLevel("io.netty", Level.ERROR);
          Configurator.setLevel("quickfix.mina", Level.WARN);
          Configurator.setLevel("com.lambdaworks", Level.WARN);
  
          // ...
  
          logger.info("FIX Controller started. Loading the API.");
  
          SpringApplication.run(MyProject.class, args);
      }
  </code></pre>
  
  <p>So again, how can I get Spring to log properly via <code>log4j2</code> along with the other dependencies I have?</p>