Voici le message d'erreur -
log4j:WARN No appenders could be found for logger (SerialPortUtil).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
Voici l'invocation dans la classe SerialPortUtil
-
private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName());
.
.
.
log.info("Serial port " + port.getName() + " is available");
Voici le contenu de mon fichier log4j.properties -
log4j.rootLogger=DebugAppender
#Debug logging
log4j.appender.DebugAppender=org.Apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=activityLog.log
log4j.appender.DebugAppender.MaxFileSize=200KB
log4j.appender.DebugAppender.MaxBackupIndex=5
log4j.appender.DebugAppender.layout=org.Apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n
Et le fichier de propriétés est sur le classpath.
Tout me semble bien, alors que se passe-t-il? Le seuil DEBUG
ne devrait-il pas également capturer la journalisation INFO
?
Bon, alors je l'ai fait fonctionner en changeant cela
log4j.rootLogger=DebugAppender
pour ça
log4j.rootLogger=DEBUG, DebugAppender
Apparemment, vous devez d'abord spécifier le niveau de consignation sur rootLogger
? Je m'excuse si j'ai perdu du temps à quiconque.
De plus, j'ai décidé de répondre à ma propre question car il ne s'agissait pas d'un problème de classpath.
À partir du lien dans le message d'erreur:
Cela se produit lorsque les fichiers de configuration par défaut log4j.properties et log4j.xml sont introuvables et que l'application n'effectue aucune configuration explicite. log4j utilise 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é pour placer log4j.properties ou log4j.xml nécessite de comprendre la stratégie de recherche du chargeur de classes utilisé. log4j ne fournit pas de configuration par défaut car la sortie sur la console ou le système de fichiers peut être interdite dans certains environnements. Voir aussi FAQ: Pourquoi log4j ne trouve-t-il pas mes propriétés dans une application J2EE ou WAR?.
Le fichier de configuration est introuvable. Utilisez-vous xml ou un fichier de propriétés?
Utilisez également logback !
La solution pour moi était de placer "log4j.properties" dans le dossier "src". Cela n'a pas fonctionné dans mon dossier de paquets, il doit en être un à la racine même du code source. L'ajout au chemin de construction, qui le déplace ensuite vers les "Bibliothèques de référence", n'a également pas fonctionné.
Pour répéter: placez log4j.properties à la racine de votre dossier src.
mes fichiers log4j.properties ont le contenu suivant, qui fonctionne sur la dernière version de Spring Tool Suite, basée sur Eclipse.
# Configure logging for testing: optionally with log file
#log4j.rootLogger=INFO, stdout
log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.Apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.Apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%
Si vous rencontrez l'erreur/l'avertissement lorsque vous exécutez un programme utilisant log4j, la solution consiste à ajouter un fichier log4j.properties visible par le chargeur de classes. Normalement, il se trouve dans le dossier "src" de votre projet Java: Ajoutez le contenu suivant au 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{ABSOLUTE} %5p %c{1}:%L - %m%n
Ajouter le code
BasicConfigurator.configure();
dans votre classe principale statique comme ci-dessous ..
Remarque: Add "\ hadoop-2.7.1\share\hadoop\common\lib\commons-logging-1.1.3.jar & \Hadoop-2.7.1\share\hadoop\common\lib\log4j-1.2.17.jar " comme références externes
import org.Apache.log4j.BasicConfigurator;
public class ViewCountDriver extends Configured implements Tool{
public static void main(String[]args) throws Exception{
BasicConfigurator.configure();
int exitcode = ToolRunner.run(new ViewCountDriver(), args);
System.exit(exitcode);
}
}
Essayez de faire quelque chose comme ce qui suit dans main:
public static void main(String[] args) {
PropertyConfigurator.configure(args[0]);
//... your code
vous devez indiquer à log4j quelle devrait être sa configuration.
Pour ajouter à @Gevorg, si une situation similaire exécute Spark localement, placez le fichier log4j.properties dans le dossier nommé resources sous le dossier principal.
Ce qui a fonctionné pour moi, c’est de créer un fichier de propriétés log4j (vous pouvez trouver de nombreux exemples sur le net) et de le placer dans le dossier des propriétés de votre répertoire de projet (créez ce dossier si ce n’est pas le cas). Le clic droit sur le dossier et Build Path->Use as Source Folder
.
J'espère que ça aide!
configurez simplement le chemin du fichier de propriétés log4j au début de la méthode principale: par exemple: PropertyConfigurator.configure ("D:\files\log4j.properties");