How to configure Spring Boot and log4j2?

How can I correctly make Spring log through log4j2 along with other dependent ones of mine (Hibernate, Netty, Mina, etc.)?

I have tried many different combinations of tunnels and dependencies. But I can either get Spring for logging, and nothing else or everything but Spring.

When logging dependecies (but Spring) messages correctly, I get the following error:

 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) 

These are my build.gradle dependencies

 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' } 

Then, getting rid of my registration dependencies and adding dependecy below:

  compile 'org.springframework.boot:spring-boot-starter-log4j2:1.4.1.RELEASE' 

Spring record will work, but there will be no other log.

This is the main method (nothing special)

  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); } 

So, how can I get Spring to log correctly through log4j2 along with the other dependencies that I have?

+7
java spring-boot logging log4j2
source share
1 answer

Spring Boot 1.4.1 is built and supports Log4J 2.6, but you are trying to use 2.7. Unfortunately, this will not work, since the API change in version 2.7 that was made in this commit was changed there. This is the reason NoSuchMethodError you see.

Returning to Log4J2 2.6.2 should fix the problem. Alternatively, you can upgrade to Spring Boot 1.5, which uses Log4J 2.7.

+11
source share

All Articles