2013-05-24 20 views
5

Es sieht so aus, als ob diese Frage schon oft gestellt wurde. Aber alle Lösungen, die ich ausprobiert habe (meistens sicher, dass sich die Datei log4j.properties am richtigen Ort befindet und korrekt eingegeben wurde) funktionieren in meinem Fall nicht.log4j: WARN Es konnten keine Appender für den Logger gefunden werden - Verwenden von slf4j-log4j12

Ich habe ein Maven-Projekt. Ich möchte Log4j für meine Tests verwenden. Die Testklasse verwendet eine in src/main/java definierte Hilfsmethode, in der der Logger verwendet wird.

In meiner Hilfsklasse (in src/main/java /) Ich habe

importiert
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

und ich habe den Logger instanziiert

private static final String TAG = Helper.class.getSimpleName(); 
private static final Logger logger = LoggerFactory.getLogger(TAG); 

ich eingeschlossen habe sowohl in src/main/Ressourcen und src/test/resources folgende log4j.properties

### set log levels - for more verbose logging change 'info' to 'debug' ### 
### Also add logfile to the root, if need stdout then add stdout appender here### 
log4j.rootLogger=debug, stdout 

### direct log messages to stdout ### 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{dd-mm HH:mm:ss,SSS} %p/%c{1}:%L - %m%n 

In meinem POM-Datei habe ich die Abhängigkeit von slf4j enthalten

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
</dependency> 

Im Code in meiner Hilfsklasse verwende ich den Logger auf diese Weise

logger.debug("logger test..."); 

Keine Nachrichten in der Konsole ausgegeben werden und ich erhalte die folgende Warnmeldung

log4j:WARN No appenders could be found for logger (Helper). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Was Vermisse ich?

aktualisieren

Die Frage nach einer Projektoption verwandt war, der die log4j.configuration Eigenschaft auf log4j-test.xml setzt. Ich habe das folgende Plugin zum Projekt maven pom hinzugefügt und das Problem behoben.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.14.1</version> 
    <configuration> 
     <systemPropertyVariables> 
     <log4j.configuration>log4j.properties</log4j.configuration> 
     </systemPropertyVariables> 
    </configuration> 
    </plugin> 
+4

Add '-Dlog4j.debug' zu den JVM-Argumenten, um genau zu sehen, welche Konfigurationsdatei log4j aufnimmt –

Antwort

5

Von den Teilen, die Sie gepostet haben, sieht es in Ordnung aus. Lassen Sie uns das Problem untersuchen. Ich habe ein einfaches Projekt (nur 2 Klassen Helper: eine Methode hat Logger-Anweisung aufrufen, AppTest: ein JUnit-Test des Verfahrens Helper zu nennen)

  1. aufzuräumen generierten Code
    mvn sauber
    folgende Dateien existieren
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main/resources/log4j.properties
    ./src/test/java/sub/optimal/ mavenexample/AppTest.java
    ./src/test /resources/log4j.properties

  2. kompilieren den Code
    mvn kompilieren
    folgende Dateien existieren
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main /resources/log4j.properties
    ./src/test/java/sub/optimal/mavenexample/AppTest.java
    ./src/test/resources/log4j.Eigenschaften
    ./target/classes/log4j.properties
    ./target/classes/sub/optimal/mavenexample/Helper.class

    wenn die Eigenschaften von Dateien nicht in das Zielverzeichnis kopiert wird, müssen Sie das finden Grund

  3. einige Ansatzpunkte, überprüfen Sie die Ausgabe von

    mvn debug kompilieren
    mvn -Dlog4j.debug Test
+0

Hi SubOptimal, Die log4j.properties wird korrekt in das Verzeichnis target/classes kopiert. Allerdings, wenn ich mvn -Dlog4j.debug Testbefehl ausführen, bekomme ich die folgende Ausgabe: log4j: Versuchen, [log4j-test.xml] mit Kontext-Classloader zu finden [email protected] log4j: Versuchen, [log4j-test.xml] mithilfe des Klassenladeprogramms [email protected] zu finden. log4j: Versuchen, [log4j-test.xml] mit ClassLoader.getSystemResource() zu finden. log4j: Die Ressource konnte nicht gefunden werden: [log4j-test.xml]. Es sieht so aus, als ob es nicht nach der Datei .properties sucht. Ich kann nicht verstehen, warum – Piero

+1

Hallo Piero, wie es für log4j-test.xml, die nicht eine Standard-Log4j Konfigurationsdatei Name ist, muss es konfiguriert werden, wowhere. Wahrscheinlich gibt es in Ihrer Konfiguration die Option '-Dlog4j.configuration = log4j-test.xml' oder die Systemeigenschaft wird programmgesteuert gesetzt. Schau es dir an. – SubOptimal

+0

Hallo SubOptimal. Ja, ich weiß immer noch nicht warum und wo diese Konfigurationsvariable gesetzt ist. Aber ich habe einen Weg gefunden, es zu reparieren. Siehe mein Update. Danke für den Tipp, wie log4j Debug-Ausgabe angezeigt wird. – Piero

0

Versuchen thes e-Befehle ...

ungesetzt $ FLUME_HOME

und dann versuchen .....

Es funktionierte für mich ....

Verwandte Themen