Aucun auteur n’a pu être trouvé pour logger (log4j)?

J’ai mis log4j dans mon chemin de compilation, mais j’obtiens le message suivant lorsque je lance 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?

Cette brève introduction au guide log4j est un peu ancienne mais toujours valide.

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


Juste pour vous faire avancer, vous avez deux approches simples que vous pouvez prendre.

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

 BasicConfigurator.configure(); 

La deuxième approche consiste à append ce log4j.properties standard (extrait du guide mentionné ci-dessus) à votre 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 

Il semble que vous ayez besoin d’append l’emplacement de votre fichier log4j.properties au Classpath dans Eclipse.

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

  1. Courir
  2. Configurations d’exécution
  3. Classpath (onglet)
  4. Entrées d’utilisateur
  5. Avancé (bouton à droite)
  6. Ajouter des dossiers
  7. puis accédez au dossier contenant votre fichier log4j.properties
  8. Appliquer
  9. Courir

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

Solution rapide:

  1. append du code à la fonction principale :

     Ssortingng 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 

Ceci est juste un avertissement.

Fixation

Cela se produit lorsque les fichiers de configuration par défaut log4j.properties et log4j.xml sont introuvables et que l’application n’exécute aucune configuration explicite.

Pour résoudre ce problème, créez / copiez simplement log4j.properties ou log4j.xml dans votre emplacement sur le log4j.properties log4j.xml (généralement identique aux fichiers jar).

-Dlog4j.configuration=file:///path/to/log4j.properties éventuellement l’option java: -Dlog4j.configuration=file:///path/to/log4j.properties .

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 sur le système de fichiers peut être interdite dans certains environnements.

Le débogage

Pour le débogage, vous pouvez essayer d’utiliser le paramètre -Dlog4j.debug=true .

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 utilisant plusieurs appenders:

 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 /example/resources/log4j.properties dans un emplacement du /example/resources/log4j.properties .

Exemple de configuration de log4j.properties de Solr:

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

  • Brève introduction à log4j: procédure d’initialisation par défaut
  • Pourquoi log4j ne trouve-t-il pas mes propriétés dans une application J2EE ou WAR?

Vous utilisez le Logger dans votre code pour enregistrer un message. Le Appender est un object ajouté à un Logger pour écrire le message sur une cible spécifique. FileAppender doit écrire dans les fichiers texte ou ConsoleAppender pour écrire dans la console. Vous devez afficher votre code de configuration Logger et Appender pour plus d’aide.

Veuillez lire le tutoriel pour mieux comprendre l’interaction de Logger et Appender.

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

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

 BasicConfigurator.configure(); 

La deuxième approche consiste à append ce fichier log4j.properties standard à votre chemin de classe :

Lors de la seconde 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 requirejs pour stocker les fichiers journaux.

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

Mais pour moi, le problème est que mon log4j.properties n’est pas correctement configuré. Voici un exemple 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 

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

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

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

Solution: Configurez log4j au début de la méthode principale:

 PropertyConfigurator.configure(xmlLog4JConfigFile); // or BasicConfigurator.configure(); if you dont have a config file 

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

src/main/resources/log4j.properties est le chemin Eclipse. Placez-les au bon endroit afin de ne pas avoir à coder en dur le chemin absolu dans le code.

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

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

   src/main/java  src/test/java   resources    

Ajoutez ce qui suit comme premier code:

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

Dans mon cas, l’erreur était le drapeau ” additivity “. Si c’est “false” pour votre package de projet racine, alors les packages enfants n’auront pas d’appender et vous verrez l’erreur ” appender not found “.

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

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

Pour info, je recevais le bûcheron comme ceci:

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

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

   maven-assembly-plugin 2.2-beta-5    true com.mycompany.mainPackage.mainClass   .     jar-with-dependencies     make-assembly package  single     

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

  1. Courir

  2. Configurations d’exécution

  3. Classpath (onglet)

  4. Entrées d’utilisateur

  5. append le pot à droite

  6. append le fichier jar log4j

  7. Appliquer

  8. Courir

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

La raison peut être le manque de mot static dans certains:

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

Si je mets l’enregistreur dans le champ de l’instance, je reçois exactement cet avertissement:

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

Pire encore, les points d’avertissement ne sont pas liés à ProcessorTest , où l’erreur se produit, mais à une classe absolument différente (expéditeur), source de problèmes. Cette classe a un enregistreur de jeu correct et n’a pas besoin de modifications! Nous pourrions chercher le problème pendant des siècles!

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

  org.slf4j slf4j-log4j12 runtime  

Au lieu de cela, je devrais utiliser:

  org.apache.logging.log4j log4j-slf4j-impl runtime  

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

Mon installation Eclipse n’a pas pu trouver log4j.properties lors de l’exécution des tests JUnit à partir d’Eclipse, même si le fichier se trouvait dans src/test/resources .

La raison était que Eclipse (ou le connecteur m2e ) ne copiait pas le contenu de src/test/resources vers le dossier de sortie attendu target/test-classes – la cause profonde était que dans les propriétés du projet sous Java Build Path -> onglet Source – > Dossiers sources sur le chemin de construction -> src / test / resources , il y avait en quelque sorte une entrée Excluded: ** . J’ai retiré cette entrée exclue .

J’ai également pu copier manuellement src/test/resources/log4j.properties vers target/test-classes/log4j.properties .

Si log4j.properties est bien sur le log4j.properties , vous utilisez Spring Boot pour créer un fichier WAR à déployer sur un serveur d’applications, vous omettez un fichier web.xml en faveur de l’autoconfiguration de Spring Boot et vous ne recevez aucun message Quoi qu’il en soit, vous devez configurer explicitement Log4j. En supposant que vous utilisez Log4j 1.2.x:

 public class AppConfig extends SpringBootServletInitializer { public static void main( Ssortingng[] 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... } 

Peut-être que rappend le projet pertinent contient log4j dans le chemin de compilation java, j’y ajoute mahout_h2o quand j’ai rencontré ce problème dans un projet mahout utilisant eclipse, ça marche!

Si vous travaillez avec beaucoup de projets, vous pouvez 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.

* En outre, vous pouvez essayer de placer les fichiers de propriétés log4j dans le chemin src lorsque le projet est exécuté Linux, les bibliothèques des autres projets et les fichiers log4.properties peuvent se trouver sous un dossier dans un emplacement du chemin de classe.

Première importation:

  import org.apache.log4j.PropertyConfigurator; 

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

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

Créez un fichier sur le chemin d’access 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 

Dans Java eclipse, copiez votre fichier conf_ref dans le dossier conf.