Configuration Log4j2 - Aucun fichier de configuration log4j2 trouvé

91

Dernièrement, j'ai décidé d'apprendre à utiliser l'enregistreur log4j2. J'ai téléchargé les fichiers jar requis, créé une bibliothèque, un fichier de configuration xml et essayé de l'utiliser. Malheureusement, je reçois cette déclaration dans la console (Eclipse):

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

Voici mon code de classe de test:

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");
    }
}

Et mon fichier de configuration xml:

<?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>

J'ai aussi essayé avec xml sans <Logger>balises, sans spécification de paquet et dans divers répertoires de dossiers / paquets, mais cela n'a pas aidé. Maintenant, mon log4j2.xmlfichier se trouve directement dans le dossier du projet dans eclipse.

Qbisiek
la source
2
Le doc sais, il doit juste être sur le chemin des classes. C'est ça?
Fildor
ouais, je l'ai manqué. Désolé pour la question stupide et merci :)
Qbisiek

Réponses:

139

Est-ce un simple projet java eclipse sans maven, etc.? Dans ce cas, vous devrez placer le log4j2.xmlfichier dans un srcdossier afin de pouvoir le trouver sur le chemin de classe. Si vous utilisez maven, mettez-le sous src/main/resourcesousrc/test/resources

Tomasz W
la source
4
Mon héros! J'avais le fichier de configuration dans le classpath (je pense), mais ce n'était pas dans le dossier src. Je l'ai déplacé là-dedans et ça marche maintenant!
Shadoninja
comment se configure avec un projet maven? (comme la méthode maven parce que je suppose que si je mets un 'log4j2.xml' sous le chemin de classe, je travaillerais), merci pour les conseils :)
Enrique San Martín
log4j2.xml est dans mon src (projet JavaFX sans maven) mais il n'est pas trouvé .. est-ce tellement compliqué?!?! :(
Ewoks
2
Pour sbtle log4j2.xmlva src/main/resourcesaussi bien.
Akavall
Je ne trouve pas ce fichier log4j2.xml
Karthiga
32

Vous devez choisir l'une des solutions suivantes:

  1. Placez le fichier log4j2.xml dans le répertoire des ressources de votre projet afin que log4j localise les fichiers sous le chemin de classe.
  2. Utilisez la propriété système -Dlog4j.configurationFile = file: /path/to/file/log4j2.xml
Abdulghaffar Al-Labadi
la source
1
-Dlog4j.configurationFilec'est ce dont j'avais besoin, car le projet sur lequel je travaille n'est pas basé sur Maven. Awesome
Kimchi Man
15

A suivi les documentations - Apache Log4j2 Configuratoin et Apache Log4j2 Maven dans la configuration de log4j2 avec yaml. Selon la documentation, les dépendances maven suivantes sont requises:

  <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>

et

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

L'ajout de ces derniers n'a pas choisi la configuration et a toujours donné une erreur. La façon de déboguer la configuration en ajoutant a -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACEaidé à voir les journaux. Plus tard, j'ai dû télécharger la source à l'aide de Maven et le débogage a aidé à comprendre les classes dépendantes de log4j2. Ils sont répertoriés dans org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory:

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

L'ajout d'un mappage de dépendances pour jackson-dataformat-yamln'aura pas les deux premières classes. Par conséquent, ajoutez la jackson-databinddépendance pour faire fonctionner la configuration yaml:

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

Vous pouvez ajouter la version en vous référant à la Test Dependenciessection de l' log4j-apiélément de version du référentiel MVN . Par exemple, pour la version 2.8.1 de log4j-api, reportez-vous à ce lien et localisez la jackson-databindversion.

De plus, vous pouvez utiliser le code Java ci-dessous pour vérifier si les classes sont disponibles dans le classpath:

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);
 }
James Jithin
la source
4

En plus de ce que Tomasz W a écrit, en démarrant votre application, vous pouvez utiliser les paramètres:

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

pour obtenir la plupart des problèmes de configuration.

Pour plus de détails, consultez la FAQ Log4j2: Comment déboguer ma configuration?

Seweryn Habdank-Wojewódzki
la source
3

Eclipse ne verra jamais un fichier tant que vous ne forcerez pas une actualisation de l'EDI. C'est une fonctionnalité! Ainsi, vous pouvez placer le fichier dans tout le projet et Eclipse l'ignorera complètement et lèvera ces erreurs. Appuyez sur Actualiser dans la vue du projet Eclipse, puis cela fonctionne.

Mike Ashby
la source
0

Dans mon cas, j'ai dû le mettre dans le dossier bin de mon projet, même le fait que mon chemin de classe soit défini sur le dossier src. Je ne sais pas pourquoi, mais ça vaut le coup d'essayer.

Florian
la source
Cela suggère que le projet ne reconnaît pas que le dossier contenant votre configuration est un dossier de ressources, donc il ne copie pas le fichier automatiquement dans le cadre de la construction. Je suggérerais d'examiner cela plus en détail car vous finirez par apporter une modification à la source qui ne sera pas copiée dans le dossier bin et finirez par passer des années à vous demander pourquoi votre modification n'a pas fonctionné.
Sarah Phillips