2017-01-20 2 views
0

Ich aktualisiere mein Logging-Framework von log4j zu log4j2. Ich habe die Schritte von den Apache-Jungs here verfolgt.Spring-Boot-Projekt log4j zu log4j2-Konvertierung Problem

  1. Ich veränderte mein log4j.xml die neuen Standards (vor allem für die Appen)
  2. Upgraded meiner gradle Datei auf die neuen Abhängigkeiten
  3. meine Feder-Boot-Verpacker Projekt Umgebaut und entfalten es

ich diese Systemeigenschaften verwende, wenn mein Glas bereitstellen:


Dspring.profiles.active

java = dev -Dlog4j.configurationFile = log4j2.xml -jar application.jar


jedoch weiterhin meine Anwendung log4j und nicht log4j2 laufen. Wenn die Debug-Eigenschaft Dlog4j.debug kann ich sehen, dass log4j versucht, die xml, Eigenschaften zu finden, etc, und sagt dann

No appenders could be found for logger. See http://logging.apache.org/log4j/1.2/faq.

Also irgendwo bin Kommissionierung bis ich Version 1.2?

Der einzige Grund, warum ich glaube, log4j2 läuft, wenn ich den Namen des log4j2.xml ändern, log4j.xml erhalte ich eine log4j Warnung mit, dass log4j2.xml could not be found. Only displying error messages to the console. Obwohl log4j spuckt Meldungen, die besagen.

Wer wird beim Wechsel von log4j und log4j2 auf etwas Ähnliches stoßen und könnte helfen?

+0

Wie Sie Ihre Abhängigkeiten in Gradle aussehen? Es gibt jetzt einen Starter für Log4j2 ('spring-boot-starter-log4j2') und" potentiell "müssen Sie möglicherweise auch 'spring-boot-starter-logging' ausschließen (natürlich abhängig von den anderen Abhängigkeiten). –

+0

Ja, ich habe 'Spring-Boot-Starter-Log4j2' und habe' Spring-Boot-Starter-Logging' ausgeschlossen. Ich habe auch 'org.apache.logging.log4j log4j-api' – DevelopingDeveloper

Antwort

2

Dies ist für Gradle 3.2.1 und Spring Boot 1.4.2.

  1. Sie haben spring-boot-starter-log4j2 zu importieren und spring-boot-starter-logging
  2. die log4j.xml-log4j2.xml Umbenennen ausschließen und ändern Sie es entsprechend an (ich glaube, Sie bereits tat,)
  3. Entweder Kopieren/umfassen die log4j2.xml Datei in src/main/resources oder sie beziehen sich durch mit dem -Dlogging.config (nicht die log4j.configurationFile, wie Sie eine Frühlings-Boot-Anwendung, da es verwenden)

Am Ende Ihres G radle Konfigurationsdatei sollte wie (Auszug) aussehen:

buildscript { 
    repositories { 
    mavenLocal() 
    } 

    dependencies { 
    classpath('io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE') 
    classpath('org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE') 
    } 
} 

plugins { 
    // ... 
} 

//apply from: 'gradle/database.gradle' 

apply plugin: 'idea' 
apply plugin: 'io.spring.dependency-management' 
apply plugin: 'java' 
apply plugin: 'org.springframework.boot' 

repositories { 
    mavenCentral() 
    jcenter() 
} 

configurations { 
    all*.exclude module: 'spring-boot-starter-logging' 
    //all*.exclude module: 'jboss-logging-annotations' 
    //all*.exclude module: 'jboss-logging' 
} 

dependencyManagement { 
    imports { 
    mavenBom("org.springframework.boot:spring-boot-dependencies:1.4.2.RELEASE") 
    } 
} 

dependencies { 
    compile 'com.lmax:disruptor:3.3.5' 
    compile 'org.springframework.boot:spring-boot-starter-actuator' 
    compile 'org.springframework.boot:spring-boot-starter-log4j2' 
    compile 'org.springframework.boot:spring-boot-starter-undertow' 
    compile 'org.springframework:spring-webmvc' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion '3.2.1' 
} 

... Ihre Log4j 2.x-Konfigurationsdatei sollte wie folgt aussehen (dies ist nur die appender haben, die in die Konsole anmeldet und die DEBUG Ebene wird nur „aktiviert "für diesen Namensraum/Paket io.shido):

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Properties> 
    <Property name="log-pattern">%d{MM-dd-yyyy HH:mm:ss.SSS} |- %highlight{%5p}{TRACE=blue, DEBUG=green, INFO=green, WARN=yellow, ERROR=red, FATAL=red} in %style{%C{1}:%L}{cyan} [%style{%t#${sys:PID}}{magenta}] - %m%n</Property> 
    </Properties> 

    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT" follow="true"> 
     <PatternLayout pattern="${log-pattern}" /> 
    </Console> 
    </Appenders> 

    <!-- Logger levels: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF --> 
    <Loggers> 
    <AsyncLogger name="io.shido" level="DEBUG" additivity="false" includeLocation="true"> 
     <AppenderRef ref="Console" /> 
    </AsyncLogger> 

    <Root level="WARN"> 
     <AppenderRef ref="Console" /> 
    </Root> 
    </Loggers> 
</Configuration> 

...und wenn Sie nicht über die log4j2.xml Datei in src/main/resources haben, so wird sie standardmäßig ausgewählt werden, oder wenn Sie ein anderes angeben müssen, verwenden Sie die --logging.config Richtlinie:

$ ./gradlew bootRun -Dspring.profiles.active=default -Dfile.encoding=UTF-8 -Dlogging.config assets/log4j2.xml 
+0

Meine log4j2.xml ist innerhalb' src/main/resources', wenn ich den Befehl '-Dlogging.config = log4j2.xml 'verwende, bekomme ich' Logging System konnte nicht initialisiert werden mit der Konfiguration von 'src/main/resources/log4j2.xml' aus einer FileNotFoundException. Ich habe sogar versucht die '-Dlogging.config' zu verwenden um den Pfad zu verdeutlichen und es konnte die Datei immer noch nicht finden – DevelopingDeveloper

+0

Soll die Ausgabe von log4j für eine log4j2 Konfiguration' log4j: asdfasdfasf' oder 'log4j2: asdfasdfasdf' sein? – DevelopingDeveloper

+0

Verwenden Sie die '-Dlogging.config'-Anweisung nicht für den Moment, legen Sie die Datei in' src/main/resources' und sehen Sie, was vor sich geht, dann versuchen Sie es mit '-Dogging' zu optimieren (aka "mach es") .config' –