Keine log4j2-Konfigurationsdatei gefunden. Standardkonfiguration verwenden: Nur Fehler in der Konsole protokollieren

Lesezeit: 8 Minuten
$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar

An die Konsole geschrieben, erhalten Sie

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Aber es sieht auch so aus, als ob die Konfigurationsdatei gefunden wurde und nicht parsbar war:

    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document is invalid: no grammar found.
    log4j:ERROR DOM element is - not a <log4j:configuration> element.
    log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

  • Stellen Sie sicher, dass Sie nicht mehrere log4j-Versionen in Ihrem Build-Pfad haben. Es sieht so aus, als ob es in der ersten Zeile um log4j 2.x geht und das letzte log4j:WARN und log4j:ERROR aus log4j 1.x besteht … sie haben verschiedene Konfigurationen..

    – Mike D3ViD Tyson

    14. September 2018 um 15:20 Uhr


Benutzer-Avatar
Jeff Maaß

Problem 1

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

Lösung 1

Arbeiten mit Version 2 von log4j alias “log4j2”

-Dlog4j.configuration=

sollte lesen

-Dlog4j.configurationFile=

Problem 2

log4j:WARN ....

Lösung 2

Entfernen Sie in Ihrem Projekt die JAR-Datei log4j-1.2 und fügen Sie stattdessen die Datei log4j-1.2-api-2.1.jar ein. Ich war mir nicht sicher, wie genau ich log4j 1.2 ausschließen sollte. Ich wusste, welche Abhängigkeit meines Projekts es erforderte. Also, mit etwas Lektüre, habe ich ein paar Sachen ausgeschlossen.

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.10</artifactId>
    <version>0.8.2.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>                
        </exclusion>
        <exclusion>
            <groupId>org.apache.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>          
    </exclusions>
</dependency>

Ich bin mir nicht sicher, welcher der Ausschlüsse den Trick getan hat. Separat habe ich eine Abhängigkeit zur 1.2-API hinzugefügt, die eine Brücke zu 2.x bildet.

<!--
    http://logging.apache.org/log4j/2.0/manual/migration.html
    http://logging.apache.org/log4j/2.0/maven-artifacts.html
    Log4j 1.x API Bridge
    If existing components use Log4j 1.x and you want to have this logging
    routed to Log4j 2, then remove any log4j 1.x dependencies and add the
    following.
-->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.2</version>
</dependency>

Jetzt fließen die 1.2-Protokolle, die nur zur Konsole gingen, tatsächlich zu unseren 2.x-Appendern.

  • Sieht so aus, als hätten Sie die Antwort bereits gefunden. Beachten Sie, dass die log4j:WARN-Ausgabe von einer log4j-1.2-JAR-Datei erzeugt wird, die sich im Klassenpfad befindet. Möglicherweise möchten Sie dieses JAR aus dem Klassenpfad entfernen und stattdessen log4j-1.2-api-2.1.jar (die 1.2-Bridge, die Teil von log4j2 ist) verwenden. Siehe auch Logging.apache.org/log4j/2.x/faq.html#which_jars

    – Remko Popma

    18. Februar 2015 um 1:00 Uhr

  • Hey, @RemkoPopma, ich habe entdeckt, dass Sie zur API beitragen. 😉

    – Paul Varga

    18. Februar 2015 um 1:47 Uhr

  • Ich tue mein Bestes. Hatte aber in letzter Zeit keine Zeit… Wenn Sie helfen möchten, sind Beiträge willkommen!

    – Remko Popma

    18. Februar 2015 um 5:46 Uhr

  • @MaasSql, ist dieses Problem jetzt behoben oder haben Sie immer noch Probleme?

    – Remko Popma

    19. Februar 2015 um 1:51 Uhr

  • @RemkoPopma, Ihre Kommentare sind sinnvoll, aber ich bin sehr neu in Java / Maven, daher weiß ich nicht, wie ich die Bridge-API durch log4j-1.2 ersetzen soll.

    – Jeff Maass

    19. Februar 2015 um 19:11 Uhr

Benutzer-Avatar
Conor Swensson

Wenn Sie nicht das Vermögen der log4j-1.2.jar auf Ihrem Klassenpfad haben, wie Renko in seinem Kommentar betont, sehen Sie nur die Nachricht keine log4j2-Konfigurationsdatei gefunden.

Dies ist ein Problem, wenn Ihre Konfigurationsdatei einen Fehler enthält, da Ihnen beim Start nicht mitgeteilt wird, wo das Problem liegt.

Zum Beispiel, wenn Sie eine log4j2.yaml-Datei haben, die log4j2 nicht verarbeiten kann, weil Sie zum Beispiel keinen YAML-Parser für Ihr Projekt konfiguriert haben oder Ihre Konfiguration einfach falsch ist. Sie werden auf die treffen keine log4j2-Konfigurationsdatei gefunden Nachricht, ohne weitere Informationen. Dies ist auch dann der Fall, wenn Sie eine gültige log4j2.xml-Datei haben, da nur log4j2 dies tun wird versuchen, die erste gefundene Konfigurationsdatei zu verarbeiten.

Ich habe festgestellt, dass der beste Weg, das Problem zu debuggen, darin besteht, die Konfigurationsdatei, die Sie verwenden möchten, gemäß dem oben erwähnten Befehlszeilenargument explizit anzugeben.

-Dlog4j.configurationFile=

Hoffentlich hilft Ihnen dies dabei, festzustellen, ob das Problem tatsächlich dadurch verursacht wird, dass Ihr Classloader die log4j2-Konfigurationsdatei oder etwas anderes in Ihrer Konfiguration nicht findet.

Aktualisieren

Sie können auch die folgende Eigenschaft verwenden, um die Standardebene des Statusloggers zu ändern, um weitere Informationen zu erhalten:

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level>

  • Es gibt ein Debug-Flag, aber es ist nicht gut dokumentiert: – Bis eine Konfiguration gefunden wird, kann die Statusprotokollierungsebene mit Systemeigenschaft gesteuert werden org.apache.logging.log4j.simplelog.StatusLogger.level. – Nachdem eine Konfiguration gefunden wurde, kann der Status-Logger-Level in der Konfigurationsdatei mit dem “status”-Attribut gesteuert werden, zum Beispiel: <Configuration status="trace">.

    – Remko Popma

    19. Februar 2015 um 3:40 Uhr

  • @RemkoPopma danke – ich habe diese Wohnung tatsächlich früher ausprobiert Dokumentation. Dort wird es jedoch als log4j2.StatusLogger.level angegeben, was nicht funktioniert. Die von Ihnen erwähnte Eigenschaft funktioniert.

    – Conor Svensson

    19. Februar 2015 um 7:25 Uhr


  • Ja, die Dokumente sind verwirrend. Zum Teil, weil sich das StatusLogger-Verhalten während der Konfiguration ändert. Ich werde die Dokumentation wie hier vorgeschlagen verbessern: issues.apache.org/jira/browse/LOG4J2-955

    – Remko Popma

    19. Februar 2015 um 7:29 Uhr

Ich hatte das gleiche Problem, aber ich bemerkte, dass ich keine log4j2.xml in meinem Projekt habe, nachdem ich im Internet über dieses Problem gelesen hatte, also kopierte ich den zugehörigen Code in einen Notizblock und stellte die Notizblockdatei auf xml zurück und fügte sie meinem Projekt unter hinzu Ordner Ressourcen. Für mich geht das.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
  <AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

Ich beschäftige mich seit einiger Zeit mit diesem Problem. Ich habe alles wie in diesem Beitrag beschrieben geändert und dachte sogar, dass Fehler aufgetreten sind. Stellen Sie in diesem Fall sicher, dass Sie das Projekt bereinigen, wenn Sie die Einstellungen in der .xml- oder .properties-Datei ändern. In Eclipse-Umgebung. Wählen Sie Projekt -> Bereinigen

Benutzer-Avatar
LuQQiu

Ich verwende hive jdbc in einem Java-Maven-Projekt und habe die gleichen Probleme.

Meine Methode besteht darin, eine log4j2.xml-Datei unter src/main/java/resources hinzuzufügen

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

public class MyClassName {
    private static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);
}

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="<your_package_name>.<your_class_name>" level="debug">
        <AppenderRef ref="Console"/>
        </Logger>
        <Root level="WARN">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Benutzer-Avatar
doppelter Piepton

Stellen Sie sicher, dass Sie a eingegeben haben log4j2.* Datei statt einer log4j.* Datei unter .../src/main/resources Mappe.

Benutzer-Avatar
Uwe Allner

Dinge, die ich überprüfe, um die Protokollierung zu überprüfen,

1) Stellen Sie sicher, dass keine älteren log4j-Versionen vorhanden sind.

mvn dependency:tree | grep log ## ./gradlew dependencies | grep log
[INFO] +- com.prayagupd:log-service:jar:1.0:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.6.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.6.2:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile

2) Stellen Sie sicher, dass ich log4j2.json richtig einstelle, was mit -Dlog4j.configurationFile=???

val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))

println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))

oder

Configurator.initialize(null, logConfig.getString("log4j.config.file"));

Auch wenn die automatische Erkennung stattfindet, stellen Sie sicher, dass der Dateiname log4j2.* und nicht log4j.* lautet.

3) Eine weitere Prüfung ist der Parser für log4j2.json. Vielen Dank an das log4j-Team, dass es keinen Parser innerhalb der API bereitstellt.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.0</version>
</dependency>

Dies kann eine Ausnahme auslösen, wenn der JSON-Parser nicht gefunden werden kann

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.

1185770cookie-checkKeine log4j2-Konfigurationsdatei gefunden. Standardkonfiguration verwenden: Nur Fehler in der Konsole protokollieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy