it-swarm.com.de

Log4j2-Konfiguration - Es wurde keine log4j2-Konfigurationsdatei gefunden

In letzter Zeit habe ich beschlossen, den Log4j2-Logger zu benutzen. Ich habe die erforderlichen JAR-Dateien heruntergeladen, eine Bibliothek, eine XML-Konfigurationsdatei erstellt und versucht, sie zu verwenden. Leider bekomme ich diese Aussage in der Konsole (Eclipse): 

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

Dies ist mein Testklassencode:

package log4j.test;

import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;

public class Log4jTest
{
    static final Logger logger = LogManager.getLogger(Logger.class.getName());

    public static void main(String[] args) {    
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.fatal("fatal");
    }
}

Und meine XML-Konfigurationsdatei:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" 
               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="log4j.test.Log4jTest" level="trace">
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="trace">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Ich habe es auch mit xml ohne <Logger>-Tags und Paketspezifikationen und in verschiedenen Ordnern/Paketen versucht, aber es hat nicht geholfen. Jetzt befindet sich meine log4j2.xml-Datei direkt im Projektordner von Eclipse.

71
Qbisiek

Ist dies ein einfaches Eclipse-Java-Projekt ohne Maven usw.? In diesem Fall müssen Sie die Datei log4j2.xml im Ordner src ablegen, um sie im Klassenpfad zu finden. Wenn Sie maven verwenden, legen Sie sie unter src/main/resources oder src/test/resources

125
Tomasz W

Sie müssen eine der folgenden Lösungen auswählen:

  1. Legen Sie die Datei log4j2.xml im Ressourcenverzeichnis Ihres Projekts ab, damit log4j Dateien unter dem Klassenpfad finden kann.
  2. Verwenden Sie die Systemeigenschaft -Dlog4j.configurationFile = file: /path/to/file/log4j2.xml

Verfolgte die Dokumentationen - Apache Log4j2 Configuratoin und Apache Log4j2 Maven bei der Konfiguration von log4j2 mit yaml. In der Dokumentation sind folgende Abhängigkeiten erforderlich:

  <dependency>
    <groupId>org.Apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.1</version>
  </dependency>
  <dependency>
    <groupId>org.Apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.1</version>
  </dependency>

und

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.8.6</version>
</dependency>

Durch das Hinzufügen dieser Elemente wurde die Konfiguration nicht ausgewählt und es wurde immer ein Fehler angezeigt. Die Art und Weise von debugging configuration durch Hinzufügen von -Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=TRACE half dabei, die Protokolle anzuzeigen. Später musste die Quelle mithilfe von Maven heruntergeladen werden, und das Debuggen half dabei, die abhängigen Klassen von log4j2 zu verstehen. Sie sind in org.Apache.logging.log4j.core.config.yaml.YamlConfigurationFactory aufgelistet:

com.fasterxml.jackson.databind.ObjectMapper
com.fasterxml.jackson.databind.JsonNode
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.dataformat.yaml.YAMLFactory

Beim Hinzufügen von Abhängigkeitszuordnung für jackson-dataformat-yaml werden die ersten beiden Klassen nicht angezeigt. Fügen Sie daher die jackson-databind-Abhängigkeit hinzu, damit die Konfiguration der yaml funktioniert:

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

Sie können die Version hinzufügen, indem Sie auf den Abschnitt Test Dependencies von log4j-api version in MVN Repository verweisen. Z.B. Für Version 2.8.1 von log4j-api beziehen Sie sich auf link und suchen Sie die jackson-databind-Version.

Darüber hinaus können Sie den folgenden Java-Code verwenden, um zu überprüfen, ob die Klassen im Klassenpfad verfügbar sind:

System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP
ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1
 String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper",
 "com.fasterxml.jackson.databind.JsonNode",
 "com.fasterxml.jackson.core.JsonParser",
 "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"};

 for(String className : classes) {
     cl.loadClass(className);
 }
10
James Jithin

Eclipse sieht nie eine Datei, bis Sie eine Aktualisierung der IDE erzwingen. Es ist eine Funktion! So können Sie die Datei überall im Projekt ablegen und Eclipse ignoriert sie vollständig und wirft diese Fehler ab. Klicken Sie in der Eclipse-Projektansicht auf "Aktualisieren" und dann funktioniert es. 

3
Mike Ashby

Zusätzlich zu dem, was Tomasz W geschrieben hat, können Sie beim Starten Ihrer Anwendung Einstellungen verwenden:

-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=TRACE 

um die meisten Konfigurationsprobleme zu bekommen.

Weitere Informationen finden Sie in den Log4j2-FAQs: Wie debugge ich meine Konfiguration?

In meinem Fall musste ich es in den bin-Ordner meines Projekts stellen, auch wenn mein Klassenpfad auf den src-Ordner gesetzt ist. Ich habe keine Ahnung warum, aber es ist einen Versuch wert.

0
Florian