如何正确设置Spring Boot和log4j2?

如何通过log4j2与我拥有的其他依赖项(Hibernate,Netty,Mina等)一起正确设置Spring日志?

我尝试了许多不同的Thin和依赖项组合。但是我要么可以让Spring登录,要么什么都可以,或者除了Spring以外的所有东西。

正确记录所有依赖关系(但Spring)时,出现以下错误:

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)

回答:

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'

}

然后,摆脱我的日志记录依赖项,并在下面添加依赖项:

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

Spring日志记录将起作用,而其他deps日志记录将不起作用。

回答:

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

}

再说一遍,如何让Spring log4j2与其他依赖项一起正确登录?

回答:

Spring Boot 1.4.1内置并支持Log4J

2.6,但是您尝试使用2.7。不幸的是,这不起作用,因为在此commit中进行了2.7中的API重大更改。这就是NoSuchMethodError您所看到的原因。

回到Log4J2 2.6.2应该可以解决此问题。另外,您可以升级到使用Log4J 2.7的Spring Boot 1.5。

以上是 如何正确设置Spring Boot和log4j2? 的全部内容, 来源链接: utcz.com/qa/420674.html

回到顶部