Aucun appender n'a été trouvé pour l'enregistreur (log4j)?

370

J'ai mis log4j dans mon buildpath, mais je reçois le message suivant lorsque j'exécute mon application:

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

Que signifient ces avertissements? Quel est l'appender ici?

maximus
la source
5
Cela semble être un avertissement d'exécution. Êtes-vous sûr de voir cela lorsque vous compilez?
maba
5
Avez-vous essayé de visiter l'URL dans la dernière ligne des avertissements?
Jesper
4
Oui!!! mais cela ne dit pas grand-chose ... J'ai découvert que j'avais besoin d'un fichier de propriétés pour configurer mon appender!
maximus
Modifiez manuellement les fichiers de configuration pour ajouter l'appendice. Assurez-vous d'avoir le bon document de configuration valide.
Roman C

Réponses:

465

Cette courte introduction au guide log4j est un peu ancienne mais toujours valable.

Ce guide vous donnera des informations sur l'utilisation des enregistreurs et des appenders.


Pour vous aider, vous avez deux approches simples à adopter.

La première consiste à simplement ajouter cette ligne à votre méthode principale:

BasicConfigurator.configure();

La deuxième approche consiste à ajouter ce log4j.propertiesfichier standard (tiré du guide mentionné ci-dessus) à votre chemin de classe:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
maba
la source
3
La première étape est ok. Citation de la courte introduction au guide log4j
ray6080
65
Pour de nouveaux trébuchements ... ajoutez le fichier log4j.properties à src / main / resources et cela suppose que vous avez un projet maven. Les trucs dans src / main / resources sont inclus dans le chemin de classe.
keni
3
Dans le paramètre du module ouvert Idée IntelliJ et sélectionnez votre dossier de ressources et cliquez sur les ressources, il ajoutera automatiquement chacune de vos ressources au chemin de classe.
Waqas
1
Ça n'a pas aidé. J'utilise Eclipse Neon pour C ++, et j'ai mis le log4j.properties à côté de l'exécutable eclipse et n'a pas aidé
Nadav B
log4j.rootLogger=DEBUG, A1est la ligne qui me manquait tout le temps.
Mohammad Faisal
74

Il semble que vous devez ajouter l'emplacement de votre log4j.propertiesfichier au chemin de classe dans Eclipse.

Assurez-vous que votre projet est ouvert dans Eclipse, puis cliquez sur le menu "Exécuter" en haut d'Eclipse et cliquez sur ce qui suit:

  1. Courir
  2. Exécuter les configurations
  3. Chemin de classe (onglet)
  4. Entrées utilisateur
  5. Avancé (bouton à droite)
  6. Ajouter des dossiers
  7. puis accédez au dossier qui contient votre fichier log4j.properties
  8. Appliquer
  9. Courir

Le message d'erreur ne devrait plus apparaître.

JDJ
la source
Les messages d'avertissement n'apparaissent pas maintenant, mais les journaux ne sont toujours pas écrits à l'emplacement souhaité
Arpan Saini
48

Solution rapide:

  1. ajouter du code à la fonction principale :

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
  2. créer un fichier nommé log4j.properties dans / path / to

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
lancerex
la source
Placez le fichier log4j.properties dans le répertoire de ressources comme src / test / resource
Alok
Pour éviter la déclaration explicite du chemin log4j.properties; placez-le dans votre dossier de projet et accédez-y comme String log4jConfPath = System.getProperty ("user.dir") + File.separator + "log4j.properties";
Amimo Benja
36

Ceci est juste un avertissement.

Fixation

Cela se produit lorsque les fichiers de configuration par défaut log4j.propertieset log4j.xmlne peut pas être trouvé et l'application N'a pas de configuration explicite.

Pour résoudre ce problème, il suffit de créer / copier log4j.propertiesou log4j.xmldans votre emplacement sur le chemin de classe (généralement le même que les fichiers jar).

En option définir l' option java: -Dlog4j.configuration=file:///path/to/log4j.properties.

log4jutilise Thread.getContextClassLoader().getResource()pour localiser les fichiers de configuration par défaut et ne vérifie pas directement le système de fichiers. Connaître l'emplacement approprié à placer log4j.propertiesou log4j.xmlnécessite de comprendre la stratégie de recherche du chargeur de classe utilisé. log4jne fournit pas de configuration par défaut car la sortie vers la console ou le système de fichiers peut être interdite dans certains environnements.

Débogage

Pour le débogage, vous pouvez essayer d'utiliser le -Dlog4j.debug=trueparamètre.

Configuration de log4j.properties

Exemple de configuration de log4j.properties:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN

Voici un autre fichier de configuration qui utilise plusieurs appender:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Apache Solr

Si vous utilisez Solr , copiez-le <solr>/example/resources/log4j.propertiesdans un emplacement sur le chemin de classe .

Voici un exemple de configuration de log4j.propertiesSolr:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Voir également:

kenorb
la source
13

La plupart des réponses ici suggèrent que le log4j.propertiesfichier soit placé au bon endroit (pour le projet maven, il devrait être situé dans src/main/resources)

Mais pour moi, le problème est que mon log4j.propertiesn'est pas correctement configuré. Voici un échantillon qui fonctionne pour moi, vous pouvez l'essayer en premier.

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Searene
la source
2
Le fait que log4j considère "ne peut pas trouver le fichier" et "spécification incomplète dans le fichier" comme la même erreur est une perte de temps.
Ed Norris
1
Pour moi, c'est la meilleure réponse. Je vote et j'ai ajouté quelques explications dans votre réponse.
schlebe
La meilleure réponse pour moi !!!
nosequeweaponer
8

Comme expliqué précédemment, il existe 2 approches

La première consiste à simplement ajouter cette ligne à votre méthode principale:

BasicConfigurator.configure();

La deuxième approche consiste à ajouter ce log4j.properties standard fichier à votre :

Tout en adoptant la deuxième approche, vous devez vous assurer d'initialiser correctement le fichier, par exemple.

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

Assurez-vous de créer le dossier requis pour stocker les fichiers journaux.

AkashK
la source
J'avais le même problème et j'ai utilisé BasicConfigurator.configure (); dans la méthode principale et maintenant le code s'exécute correctement.
Surabhi Pandey
7

Vous utilisez le Loggerdans votre code pour enregistrer un message. Le Appenderest un objet en annexe à Loggerécrire le message à une cible spécifique. Il y a FileAppenderà écrire dans des fichiers texte ou ConsoleAppenderà écrire dans la console. Vous devez montrer votre code de configuration du Logger et Appender pour plus d'aide.

veuillez lire le tutoriel pour une meilleure compréhension de l'interaction de Logger et Appender.

Simulant
la source
6

Assurez-vous que le fichier de propriétés est correctement défini. Et encore une fois, il semble que le compilateur ne trouve pas le fichier de propriétés, vous pouvez définir comme suit sur le pom (uniquement lorsque vous utilisez le projet maven).

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >
belvey
la source
Cette! J'ai passé des heures à trouver une réponse. Mon code de cas fonctionne bien sous Linux mais cette erreur dans Windows (même NB IDE) et toutes les solutions ci-dessus ne fonctionnent pas!
Tiana987642
5

J'ai la même erreur. Voici le problème qui conduit à ce message d'erreur:

Je crée des objets qui utilisent le Logger avant de configurer le log4j:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);

Solution: configurez log4j au début dans la méthode principale:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file
a3po2.0
la source
Merci beaucoup!!! Tout le monde suppose que Spring ou Tomcat, ou quoi que ce soit pour initialiser la configuration.
Windgazer
3

Je pense que vous devez comprendre où le fichier jar log4j ou le code Java recherche les fichiers de configuration log4j.

src/main/resources/log4j.propertiesest le chemin Eclipse. Placez-les dans un emplacement approprié afin de ne pas avoir à coder en dur le chemin absolu dans le code.

Lisez mon article et un exemple de solution pour cela http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/

Jin Thakur
la source
3

Une autre raison pour laquelle cela peut se produire (dans RCP4) est que vous utilisez plusieurs infrastructures de journalisation dans votre fichier cible. Par exemple, cela se produit si vous utilisez une combinaison de slf4j, log4j et ch.qos.logback.slf4j dans l'onglet de contenu de vos fichiers cible.

ekjcfn3902039
la source
3

Ajoutez ce qui suit comme premier code:

Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);
fty4
la source
2

Dans mon cas, l'erreur était l'indicateur " additivité ". S'il est "faux" pour votre package de projet racine, les packages enfants n'auront pas d'appendice et vous verrez l' erreur " appender not found ".

Antonio Martin
la source
2

J'ai rencontré le même problème lorsque j'ai essayé d'exécuter la classe de test JUnit.

Le problème est résolu après avoir ajouté manuellement le fichier log4j.properties dans le dossier src / test / resources.

L'ajout du code ci-dessous au fichier log4j.properties a résolu le problème:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Yamuna Erraguntla
la source
1

J'ai rencontré ce problème en essayant de créer un fichier exécutable avec maven dans intellij 12. Il s'est avéré que, parce que le fichier manifeste java n'incluait pas de chemin de classe, le fichier de propriétés log4j était introuvable au niveau racine (où le le fichier jar a été exécuté depuis.)

Pour info, je recevais l'enregistreur comme ceci:

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

Et j'ai pu le faire fonctionner avec un fichier pom qui comprenait ceci:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> 
                        <mainClass>com.mycompany.mainPackage.mainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
                    </manifestEntries>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
jmort
la source
1

Assurez-vous que votre projet est ouvert dans Eclipse, puis cliquez sur le menu "Exécuter" en haut d'Eclipse et cliquez sur ce qui suit:

  1. Courir

  2. Exécuter les configurations

  3. Chemin de classe (onglet)

  4. Entrées utilisateur

  5. ajouter le pot à droite

  6. ajouter un fichier jar log4j

  7. Appliquer

  8. Courir

Le message d'erreur ne devrait plus apparaître.

Varaj Vignesh
la source
1

La raison peut être le manque de mot staticdans certains:

final static Logger logging = Logger.getLogger(ProcessorTest.class);

Si je fais enregistrer le champ d'instance, je reçois exactement cet avertissement:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

Pire encore, l'avertissement ne pointe pas vers le ProcessorTestlieu de l'erreur, mais vers une classe absolument différente (l'expéditeur) comme source de problèmes. Cette classe a un enregistreur de jeu correct et n'a besoin d'aucune modification! Nous pourrions chercher le problème depuis des lustres!

Gangnus
la source
1

J'ai rencontré le même problème lorsque j'utilise log4j2. Mon problème est dû à une mauvaise bibliothèque dépendante:

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

Au lieu de cela, je devrais utiliser:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <scope>runtime</scope>
    </dependency>

Dans mon cas, j'ai un log4j2.xml défini dans mon répertoire "resources", et spécifié pour l'utiliser par:

System.setProperty("log4j.configurationFile", "log4j2.xml");
John Zhang
la source
1

Log4J affiche ce message d'avertissement lorsque le code Java Log4j cherche à créer une première ligne de journal dans votre programme.

En ce moment, Log4j fait 2 choses

  1. il recherche pour trouver le log4j.propertiesfichier
  2. il recherche pour instancier l'appender définir dans log4j.properties

Si log4Jne trouve pas le log4j.propertiesfichier ou si l'appender déclaré dans log4j.rootloggern'est pas défini ailleurs danslog4j.properties fichier, le message d'avertissement s'affiche.

ATTENTION: le contenu du fichier de propriétés doit être correct.

Le contenu suivant n'est PAS correct

log4j.rootLogger=file

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

car fileappender est déclaré dans LOWER-CASE dans l' log4j.rootloggerinstruction et défini dans l'instruction log4j.appender à l'aide de UPPER-CASE!

Un fichier correct serait

log4j.rootLogger=FILE

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

Si MAVEN est utilisé, vous devez placer les fichiers log4j.properties dans src/main/resourcesET démarrer une génération MAVEN.

Le fichier Log4j.properties est ensuite copié dans le target/classesdossier.

Log4J utilise le log4j.propertiesfichier qu'il a trouvé target/classes!

schlebe
la source
1

J'ai eu ce problème également. J'ai juste oublié de marquer le répertoire des ressources dans IntelliJ IDEA

  1. Clic droit sur votre répertoire
  2. Marquer le répertoire comme
  3. Racine des ressources
Sadap
la source
1

Si vous utilisez Eclipse et que ce problème est apparu de nulle part après que tout a bien fonctionné au préalable, essayez d'y aller Project - Clean - Clean.

stijena
la source
0

Mon installation Eclipse n'a pas pu être trouvée log4j.propertieslors de l'exécution des tests JUnit à partir d'Eclipse, même si le fichier se trouvait àsrc/test/resources .

La raison en était qu'Eclipse (ou le connecteur m2e ) n'a pas copié le contenu du src/test/resourcesdossier de sortie attendu target/test-classes- la cause principale était que dans les propriétés du projet sous Java Build Path -> onglet Source -> Dossiers source sur le chemin de génération -> src / test / ressources , il y avait en quelque sorte une Excluded: **entrée. J'ai supprimé cette entrée exclue .

Sinon, je pourrais avoir copié manuellement src/test/resources/log4j.propertiesà target/test-classes/log4j.properties.

Abdull
la source
0

Si log4j.propertiesest en effet sur le chemin de classe, vous utilisez Spring Boot pour créer un fichier WAR à déployer sur un serveur d'applications, vous omettez un web.xmlfichier en faveur de la configuration automatique de Spring Boot et vous n'obtenez aucun message de journal, vous devez explicitement configurer Log4j. En supposant que vous utilisez Log4j 1.2.x:

public class AppConfig extends SpringBootServletInitializer {

    public static void main( String[] args ) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args );
    }

    @Override
    protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
        PropertyConfigurator.configure(log4j);
        return application;
    }

// Other beans as required...
}
Brian Schalme
la source
0

Peut-être que le projet pertinent contient log4j dans le chemin de génération java, j'ajoute mahout_h2o lorsque j'ai rencontré ce problème dans un projet mahout utilisant eclipse, cela fonctionne!

Vent de nuit
la source
0

si vous travaillez avec de nombreux projets, vous risquez de rencontrer un problème de style.

* vous devez avoir un fichier lof4j.properties et ce fichier est inclus dans les propriétés du journal d'un autre projet.

* À côté, vous pouvez essayer de mettre les fichiers de propriétés log4j dans le chemin src lorsque le projet est travaillé.

yasin
la source
0

Première importation:

 import org.apache.log4j.PropertyConfigurator;

Ajoutez ensuite le code ci-dessous à la méthode principale:

String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);

Créez un fichier au chemin d'accès et ajoutez le code ci-dessous à ce fichier.

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
himansug
la source
0

La solution sur ce site a fonctionné pour moi https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/ . Je ne vois plus aucun avertissement de log4j

Je mets cela dans un fichier log4j.properties que je mets dans src / main / resources

# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender

# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
ihossain
la source
0

Tout d'abord: créez un fichier log4j.properties

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Placez-le dans src / main / resources /

Après cela, utilisez ces 2 dépendances:

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

Il est nécessaire d'ajouter cette dépendance finale au fichier POM:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
arme à nez
la source
0

Considérez l'argument JVM log4j Dlog4j.configuration

En général:

Ajoutez l'argument JVM qui indique le fichier de configuration log4j. La syntaxe est la suivante:

java [ options ] -jar file.jar [ arguments ]

Un exemple de ligne de commande réelle est semblable à ce qui suit:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

Pour les utilisateurs IntelliJ IDE:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

Conseils:

Les utilisateurs d'IDE Eclipse trouveront une approche équivalente

Pour l'éditeur de configuration d'exécution / débogage, il est très probable qu'au début des temps, votre fichier exécutable particulier ne soit pas là. Selon la taille du projet sur lequel vous travaillez actuellement, il peut être désagréable de parcourir les répertoires pour le trouver. C'est moins compliqué si vous exécutez / exécutez simplement le fichier (cliquez sur lecture) une fois avant de lancer la configuration / débogage, quel que soit le résultat de l'exécution.

3.Faites attention à votre répertoire de travail, aux chemins relatifs et au chemin de classe.

Farlon Souto
la source
0

Pour moi, la raison était apparemment différente et le message d'erreur trompeur.

Avec juste cela dans mon build.gradle, il se plaindrait que slf4j était manquant au début du journal, mais enregistre toujours les choses, bien que dans un format médiocre:

    compile 'log4j:log4j:1.2.17'

L'ajout de cette dépendance entraînerait pour moi le message d'erreur "Aucun appender n'a été trouvé", même si je les avais définis dans src/main/java/log4j.properties:

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'

Enfin, l'ajout de la dépendance suivante (que j'ai seulement deviné en la copiant dans un autre projet) a résolu le problème:

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'
    compile 'commons-logging:commons-logging:1.2'

Je ne sais pas pourquoi, mais avec ça ça marche. Avez-vous des idées à ce sujet?

Kira Resari
la source