Für logger (log4j) konnten keine Appender gefunden werden?

Ich habe log4j in meinen Buildpath eingefügt, aber beim Ausführen meiner Anwendung bekomme ich folgende Meldung:

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. 

Was bedeuten diese Warnungen? Was ist der Appender hier?

Solutions Collecting From Web of "Für logger (log4j) konnten keine Appender gefunden werden?"

Diese kurze Einführung in log4j Guide ist ein bisschen alt, aber immer noch gültig.

Dieser Leitfaden gibt Ihnen einige Informationen zur Verwendung von Loggern und Appendern.


Nur um Sie in Schwung zu bringen, haben Sie zwei einfache Möglichkeiten, die Sie ergreifen können.

Das erste ist, diese Zeile zu Ihrer Hauptmethode hinzuzufügen:

 BasicConfigurator.configure(); 

Der zweite Ansatz besteht darin, diese Standarddatei log4j.properties (aus der oben genannten Anleitung) in Ihren classnpfad 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 

log4j.properties müssen Sie den Speicherort Ihrer log4j.properties Datei zum log4j.properties in Eclipse hinzufügen.

Stellen Sie sicher, dass Ihr Projekt in Eclipse geöffnet ist. Klicken Sie dann auf das Menü “Ausführen” oben in Eclipse und klicken Sie auf Folgendes:

  1. Lauf
  2. Konfigurationen ausführen
  3. classnpfad (Registerkarte)
  4. Benutzereinträge
  5. Erweitert (Taste rechts)
  6. Ordner hinzufügen
  7. Navigieren Sie dann zu dem Ordner, der Ihre log4j.properties-Datei enthält
  8. Sich bewerben
  9. Lauf

Die Fehlermeldung sollte nicht mehr angezeigt werden.

Schnelle lösung:

  1. Code zur Hauptfunktion hinzufügen:

     String log4jConfPath = "/path/to/log4j.properties"; PropertyConfigurator.configure(log4jConfPath); 
  2. Erstellen Sie eine Datei mit dem Namen log4j.properties unter / 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 

Dies ist nur eine Warnung.

Festsetzung

Dies tritt auf, wenn die Standardkonfigurationsdateien log4j.properties und log4j.xml nicht gefunden werden und die Anwendung keine explizite Konfiguration durchführt.

Um dies zu beheben, erstellen / kopieren log4j.properties einfach log4j.properties oder log4j.xml in einen Speicherort auf dem classnpfad (normalerweise identisch mit den JAR-Dateien).

Optionale Java-Option: -Dlog4j.configuration=file:///path/to/log4j.properties .

log4j verwendet Thread.getContextClassLoader().getResource() , um die Standardkonfigurationsdateien zu finden, und prüft das Dateisystem nicht direkt. log4j.properties den Speicherort für log4j.properties oder log4j.xml muss die Suchstrategie des verwendeten classnladeprogramms verstanden werden. log4j bietet keine Standardkonfiguration, da die Ausgabe in der Konsole oder im Dateisystem in einigen Umgebungen verboten sein kann.

Debuggen

Zum Debuggen können Sie versuchen, den Parameter -Dlog4j.debug=true .

Konfiguration von log4j.properties

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

Hier ist eine weitere Konfigurationsdatei, die mehrere Appender verwendet:

 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

Wenn Sie Solr verwenden , kopieren Sie /example/resources/log4j.properties in einen Speicherort im classnpfad .

Beispielkonfiguration von log4j.properties von Solr geht wie log4j.properties :

 # 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 

Siehe auch:

  • Kurze Einführung in log4j: Standardinitialisierungsverfahren
  • Warum kann log4j meine Eigenschaften nicht in einer J2EE- oder WAR-Anwendung finden?

Sie verwenden den Logger in Ihrem Code, um eine Nachricht zu protokollieren. Der Appender ist ein Objekt, das an einen Logger angehängt wird, um die Nachricht an ein bestimmtes Ziel zu schreiben. Es gibt FileAppender zum Schreiben in Textdateien oder der ConsoleAppender zum Schreiben in die Konsole. Sie müssen Ihren Code für das Logger- und Appender-Setup anzeigen, um weitere Hilfe zu erhalten.

Bitte lesen Sie das Tutorial für ein besseres Verständnis der Interaktion von Logger und Appender.

Wie bereits erläutert, gibt es zwei Ansätze

Das erste ist, diese Zeile zu Ihrer Hauptmethode hinzuzufügen:

 BasicConfigurator.configure(); 

Der zweite Ansatz besteht darin, diese Standarddatei log4j.properties zu Ihrem classnpfad hinzuzufügen:

Beim zweiten Ansatz müssen Sie sicherstellen, dass Sie die Datei ordnungsgemäß initialisieren, z.

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

Stellen Sie sicher, dass Sie den erforderlichen Ordner zum Speichern der Protokolldateien erstellen.

Die meisten Antworten hier deuten darauf log4j.properties , dass log4j.properties Datei log4j.properties an der richtigen Stelle platziert werden sollte (für das Maven-Projekt sollte sie sich in src/main/resources ).

Aber für mich ist das Problem, dass meine log4j.properties nicht richtig konfiguriert ist. Hier ist ein Beispiel, das für mich funktioniert, Sie können es zuerst ausprobieren.

 # 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 

Ich bekomme den gleichen Fehler. Hier das Problem, das zu dieser Fehlermeldung führt:

Ich erstelle einige Objekte, die den Logger verwenden, bevor ich den log4j konfiguriere:

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

Lösung: Konfigurieren Sie log4j am Anfang in der Hauptmethode:

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

Ich denke, Sie sollten verstehen, wo die log4j-JAR-Datei oder der Java-Code nach den log4j-Konfigurationsdateien sucht.

src/main/resources/log4j.properties ist der Eclipse-Pfad. Platzieren Sie sie an einem geeigneten Ort, damit Sie den absoluten Pfad im Code nicht fest codieren müssen.

Lies meinen Artikel und die Beispiellösung dafür http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/

Stellen Sie sicher, dass die Eigenschaftendatei ordnungsgemäß festgelegt wurde. Und wieder scheint es, dass der Compiler die Eigenschaftendatei nicht finden kann, Sie können sie wie folgt am Pom setzen (nur wenn Sie Maven-Projekt verwenden).

   src/main/java  src/test/java   resources    

Fügen Sie Folgendes als ersten Code hinzu:

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

In meinem Fall war der Fehler das Flag ” Additivität “. Wenn es für Ihr root-Projektpaket “falsch” ist, dann haben die untergeordneten Pakete keinen Appender und Sie werden den Fehler ” appender not found ” sehen.

Ein weiterer Grund dafür (in RCP4) ist, dass Sie mehrere Protokoll-Frameworks in Ihrer Zieldatei verwenden. Dies wird beispielsweise auftreten, wenn Sie eine Kombination aus slf4j, log4j und ch.qos.logback.slf4j in der Registerkarte für die Inhaltsdateien der Zieldateien verwenden.

Ich stieß auf dieses Problem, als ich versuchte, ein ausführbares jar mit maven in intellij 12 zu erstellen. Es stellte sich heraus, dass die Datei log4j properties nicht auf der root-Ebene gefunden werden konnte, weil die Java-Manifest-Datei keinen classnpfad enthielt JAR-Datei wurde von ausgeführt.)

FYI Ich habe den Logger so bekommen:

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

Und ich konnte es mit einer Pom-Datei arbeiten lassen, die folgendes enthielt:

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

Stellen Sie sicher, dass Ihr Projekt in Eclipse geöffnet ist. Klicken Sie dann auf das Menü “Ausführen” oben in Eclipse und klicken Sie auf Folgendes:

  1. Lauf

  2. Konfigurationen ausführen

  3. classnpfad (Registerkarte)

  4. Benutzereinträge

  5. Füge das Glas rechts hinzu

  6. Fügen Sie die log4j-JAR-Datei hinzu

  7. Sich bewerben

  8. Lauf

Die Fehlermeldung sollte nicht mehr angezeigt werden.

Der Grund kann Mangel an dem Wort static in einigen sein:

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

Wenn ich das Instanzfeld logger mache, bekomme ich genau diese Warnung:

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

Was noch schlimmer ist, die Warnung weist nicht auf ProcessorTest , wo der Fehler liegt, sondern auf eine absolut andere class (Sender) als Quelle von Problemen. Diese class hat den richtigen Logger und braucht keine Änderungen! Wir könnten ewig nach dem Problem suchen!

Ich habe das gleiche Problem, wenn ich log4j2 benutze. Mein Problem wird durch Verwendung der falschen abhängigen Bibliothek verursacht:

  org.slf4j slf4j-log4j12 runtime  

Stattdessen sollte ich Folgendes verwenden:

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

In meinem Fall habe ich eine log4j2.xml in meinem “resources” -Verzeichnis definiert und angegeben, um sie zu verwenden:

 System.setProperty("log4j.configurationFile", "log4j2.xml"); 

Meine Eclipse-Installation konnte log4j.properties beim Ausführen von JUnit- Tests aus Eclipse nicht finden, obwohl sich die Datei unter src/test/resources .

Der Grund dafür war, dass Eclipse (oder der m2e- Connector) Inhalte aus src/test/resources in den erwarteten Ausgabeordner target/test-classes kopiert hat – die Ursache lag in den Projekteigenschaften unter Java Build Path -> Source tab – > Quellordner im Buildpfad -> src / test / resources , irgendwie gab es einen Excluded: ** Eintrag. Ich habe diesen ausgeschlossenen Eintrag entfernt.

Alternativ hätte ich src/test/resources/log4j.properties in target/test-classes/log4j.properties .

Wenn sich log4j.properties tatsächlich im classnpfad befindet, verwenden Sie Spring Boot, um eine WAR-Datei für die Bereitstellung auf einem Anwendungsserver zu erstellen. Sie verzichten auf eine web.xml Datei zugunsten der log4j.properties von Spring Boot und erhalten keine Protokollmeldungen In jedem Fall müssen Sie Log4j explizit konfigurieren. Angenommen, Sie verwenden 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... } 

Vielleicht fügen Sie das relevante Projekt enthält log4j in Java-Build-Pfad, ich füge mahout_h2o hinein, wenn ich dieses Problem in einem Mahout-Projekt mit Eclipse traf, funktioniert es!

Wenn Sie mit vielen Projekten zusammenarbeiten, können Sie mit einem Stilproblem konfrontiert werden.

* Sie müssen eine lof4j.properties-Datei haben, und diese Datei enthält Protokolleigenschaften eines anderen Projekts.

* Nebenbei können Sie versuchen, log4j-Eigenschaftendateien in den src-Pfad zu stellen, wenn das Projekt unter Linux OS ausgeführt wird. Libs anderer Projekt- und log4.properties-Dateien können sich unter einem Ordner an einem Speicherort im classnpfad befinden.

Erster Import:

  import org.apache.log4j.PropertyConfigurator; 

Fügen Sie dann den folgenden Code zur Hauptmethode hinzu:

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

Erstellen Sie eine Datei im Pfad zu und fügen Sie den folgenden Code zu dieser Datei hinzu.

 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 

In Java Eclipse kopieren Sie Ihren conf_ref in den conf Ordner.