2016-08-09 9 views
2

Der Versuch, log4j in SpringBoot + Gradle-Projekt zu aktivieren ist weniger üblich als Maven. So, hier ist das Problem, das ich bin vor:So aktivieren Sie Log4j auf SpringBoot Gradle: log4j-über-slf4j.jar, slf4j-log4j12.jar Mehrere Bindungen

gradle clean bootRun --stacktrace 
:clean 
:compileJava 
:processResources 
:classes 
:findMainClass 
:bootRun 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/mdesales/.m2/repository/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/mdesales/.m2/repository/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. 
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. 
Exception in thread "main" java.lang.ExceptionInInitializerError 

Fragen

Antwort

2

Gradle Dependency Resolution

Sie können die Abhängigkeitsauflösungsvermögen von Gradle verwenden, welche Bibliothek Version laden zu lösen. Einer der Fehler bezieht sich auf die zu ladende Version von Log4j, die von 2 Standorten stammt, wie in den Fehlerprotokollen gezeigt. Wählen Sie also für jeden Namen der Bibliotheken aus, welche Version gewinnen soll.

Der zweite Teil ist es, die Abhängigkeiten zu den Spring-Boot-Logging und Logback-Klassiker vollständig auszuschließen, die für die Einrichtung der Protokollierung für SpringBoot standardmäßig verantwortlich sind. Der folgende Block half dabei.

configurations.all { 
    resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
    if (details.requested.name == 'log4j') { 
     details.useTarget 'log4j:log4j:1.2.+' 
    } 
    } 
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' 
    exclude group: 'org.springframework.boot', module: 'logback-classic' 
} 

Log4j Abhängigkeiten

Schließlich ist die letzte Änderung der Satz von log4j und slf4j Abhängigkeiten hinzufügen, die Sie die Abhängigkeiten geladen wird helfen.

runtime group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21' 
    runtime group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.21' 
    runtime group: 'org.slf4j', name: 'jul-to-slf4j', version: '1.7.21' 
    runtime group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.21' 
    runtime group: 'log4j', name: 'log4j', version: '1.2.17' 

log4j.xml

Platz unter dem üblichen Verzeichnis src/main/resources/.

Nachdem diese an Ort und Stelle, ich habe, was ich brauchte: die Protokollierung Ausgabe ist anders und mit den Eigenschaften auf meinem log4j.xml.

$ SPRING_PROFILES_ACTIVE=dev gradle clean bootRun --stacktrace 
:clean 
:compileJava 
:processResources 
:classes 
:findMainClass 
:bootRun 
    2016-08-09 07:20:47,006 0  | INFO | context.annotation.AnnotationConfigApplicationContext.prepareRefresh#581 ["restartedMain" null] Refreshing org.spring[email protected]15225245: startup date [Tue Aug 09 07:20:46 PDT 2016]; root of context hierarchy  
    2016-08-09 07:20:47,235 229 | INFO | internal.util.Version.<clinit>#30 ["background-preinit" null] HV000001: Hibernate Validator 5.2.4.Final  
    2016-08-09 07:20:47,440 434 | INFO | factory.annotation.AutowiredAnnotationBeanPostProcessor.<init>#155 ["restartedMain" null] JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 
Verwandte Themen