Ich habe log4j in meinen Erstellungspfad eingefügt, erhalte jedoch die folgende Meldung, wenn ich meine Anwendung ausführe:
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?
Antworten:
Diese kurze Einführung in die log4j- Anleitung ist etwas alt, aber immer noch gültig.
In diesem Handbuch finden Sie einige Informationen zur Verwendung von Loggern und Appendern.
Um Sie zum Laufen zu bringen, haben Sie zwei einfache Ansätze.
Zunächst müssen Sie diese Zeile einfach zu Ihrer Hauptmethode hinzufügen:
Der zweite Ansatz besteht darin, diese Standarddatei
log4j.properties
(aus dem oben genannten Handbuch entnommen) zu Ihrem Klassenpfad hinzuzufügen :quelle
log4j.rootLogger=DEBUG, A1
ist die Linie, die ich die ganze Zeit vermisst habe.Es sieht so aus, als müssten Sie den Speicherort Ihrer
log4j.properties
Datei zum Klassenpfad in Eclipse hinzufügen .Stellen Sie sicher, dass Ihr Projekt in Eclipse geöffnet ist, klicken Sie oben in Eclipse auf das Menü "Ausführen" und dann auf Folgendes:
Die Fehlermeldung sollte nicht mehr angezeigt werden.
quelle
Schnelle Lösung:
Code zur Hauptfunktion hinzufügen :
Erstellen Sie eine Datei mit dem Namen log4j.properties unter / path / to
quelle
Dies ist nur eine Warnung.
Festsetzung
Dies geschieht , wenn die Konfigurationsdateien standardmäßig
log4j.properties
und kannlog4j.xml
nicht gefunden werden und die Anwendung führt keine explizite Konfiguration.Um das zu beheben, einfach erstellen / kopieren
log4j.properties
oderlog4j.xml
in die ein Standort auf dem Classpath ( in der Regel die gleichen wie die JAR - Dateien).Optional Java-Option einstellen :
-Dlog4j.configuration=file:///path/to/log4j.properties
.Debuggen
Zum Debuggen können Sie versuchen,
-Dlog4j.debug=true
Parameter zu verwenden .Konfiguration von
log4j.properties
Beispielkonfiguration von
log4j.properties
:Hier ist eine weitere Konfigurationsdatei, die mehrere Appender verwendet:
Apache Solr
Wenn Sie Solr verwenden , kopieren Sie es
<solr>/example/resources/log4j.properties
an eine Stelle im Klassenpfad .Die Beispielkonfiguration
log4j.properties
von Solr lautet wie folgt:Siehe auch:
quelle
Die meisten Antworten hier deuteten darauf hin, dass die
log4j.properties
Datei am richtigen Speicherort abgelegt werden sollte (für ein Maven-Projekt sollte sie sich in befindensrc/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.quelle
Wie bereits erläutert, gibt es zwei Ansätze
Zunächst müssen Sie diese Zeile einfach zu Ihrer Hauptmethode hinzufügen:
Der zweite Ansatz besteht darin, diese Standarddatei log4j.properties zu Ihrem Klassenpfad hinzuzufügen :
Während Sie den zweiten Ansatz wählen, müssen Sie sicherstellen, dass Sie die Datei ordnungsgemäß initialisieren, z.
Stellen Sie sicher, dass Sie den erforderlichen Ordner zum Speichern von Protokolldateien erstellen.
quelle
Sie verwenden das
Logger
in Ihrem Code, um eine Nachricht zu protokollieren. DasAppender
ist ein Objekt, das an a angehängt ist,Logger
um die Nachricht an ein bestimmtes Ziel zu schreiben. Es gibtFileAppender
in TextdateienConsoleAppender
zu schreiben oder in die Konsole zu schreiben. Sie müssen Ihren Code des Logger- und Appender-Setups anzeigen, um weitere Hilfe zu erhalten.Bitte lesen Sie das Tutorial, um die Interaktion von Logger und Appender besser zu verstehen.
quelle
Stellen Sie sicher, dass die Eigenschaftendatei richtig eingestellt ist. Und wieder scheint es so, als ob der Compiler die Eigenschaftendatei nicht finden kann. Sie können dies wie folgt am POM einstellen (nur wenn Sie das Maven-Projekt verwenden).
quelle
Ich bekomme den gleichen Fehler. Hier das Problem, das zu dieser Fehlermeldung führt:
Ich erstelle einige Objekte, die den Logger verwenden, bevor ich log4j konfiguriere:
Lösung: Konfigurieren Sie log4j am Anfang in der Hauptmethode:
quelle
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 Eclipse-Pfad. Platzieren Sie sie an einer geeigneten Stelle, damit Sie den absoluten Pfad im Code nicht fest codieren müssen.Lesen Sie meinen Artikel und meine Beispiellösung für diese http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/
quelle
Ein weiterer Grund, warum dies (in RCP4) passieren kann, ist, dass Sie mehrere Protokollierungsframeworks in Ihrer Zieldatei verwenden. Dies tritt beispielsweise auf, wenn Sie eine Kombination aus slf4j, log4j und ch.qos.logback.slf4j auf der Registerkarte Inhalt Ihrer Zieldateien verwenden.
quelle
Fügen Sie als ersten Code Folgendes hinzu:
quelle
In meinem Fall war der Fehler das Flag " Additivität ". Wenn es für Ihr Root-Projektpaket "false" ist, haben die untergeordneten Pakete keinen Appender und Sie sehen den Fehler " Appender nicht gefunden ".
quelle
Ich hatte das gleiche Problem, als ich versuchte, die JUnit-Testklasse auszuführen.
Das Problem wurde behoben, nachdem ich die Datei log4j.properties manuell im Ordner src / test / resources hinzugefügt habe.
Durch Hinzufügen des folgenden Codes zur Datei log4j.properties wurde das Problem behoben:
quelle
Ich bin auf dieses Problem gestoßen, als ich versucht habe, eine ausführbare JAR-Datei mit Maven in Intellij 12 zu erstellen. Da sich herausstellte, dass die Java-Manifestdatei keinen Klassenpfad enthielt, konnte die log4j-Eigenschaftendatei nicht auf der Stammebene gefunden werden (wo die JAR-Datei wurde ausgeführt von.)
Zu Ihrer Information, ich habe den Logger so bekommen:
Und ich konnte es mit einer POM-Datei zum Laufen bringen, die Folgendes enthielt:
quelle
Stellen Sie sicher, dass Ihr Projekt in Eclipse geöffnet ist, klicken Sie oben in Eclipse auf das Menü "Ausführen" und dann auf Folgendes:
Lauf
Konfigurationen ausführen
Klassenpfad (Registerkarte)
Benutzereinträge
Glas rechts hinzufügen
Fügen Sie die log4j-JAR-Datei hinzu
Anwenden
Lauf
Die Fehlermeldung sollte nicht mehr angezeigt werden.
quelle
Der Grund kann
static
in einigen Fällen das Fehlen des Wortes sein :Wenn ich Logger zum Instanzfeld mache, erhalte ich genau diese Warnung:
Was noch schlimmer ist, die Warnung weist nicht darauf hin
ProcessorTest
, wo der Fehler liegt, sondern auf eine absolut andere Klasse (Absender) als Problemquelle. Diese Klasse hat den richtigen Set Logger und braucht keine Änderungen! Wir könnten ewig nach dem Problem suchen!quelle
Ich hatte das gleiche Problem, als ich log4j2 verwendete. Mein Problem wird durch die Verwendung einer falschen abhängigen Bibliothek verursacht:
Stattdessen sollte ich verwenden:
In meinem Fall habe ich eine log4j2.xml in meinem "Ressourcen" -Verzeichnis definiert und angegeben, um sie zu verwenden durch:
quelle
Log4J zeigt diese Warnmeldung an, wenn der Log4j-Java-Code nach einer ersten Protokollzeile in Ihrem Programm sucht.
In diesem Moment macht Log4j zwei Dinge
log4j.properties
Datei zu findenlog4j.properties
Wenn
log4J
dielog4j.properties
Datei nicht gefunden wird oder wenn der in deklarierte Appenderlog4j.rootlogger
nicht an anderer Stelle in derlog4j.properties
Datei definiert ist, wird die Warnmeldung angezeigt.VORSICHT: Der Inhalt der Eigenschaftendatei muss korrekt sein.
Der folgende Inhalt ist NICHT korrekt
weil der
file
Appender in derlog4j.rootlogger
Anweisung LOWER-CASE deklariert und in der Anweisung log4j.appender mit UPPER-CASE definiert ist!Eine korrekte Datei wäre
Wenn MAVEN verwendet wird, müssen Sie die Dateien log4j.properties in
src/main/resources
AND ablegen und einen MAVEN-Build starten.Die Datei Log4j.properties wird dann in den
target/classes
Ordner kopiert .Log4J verwendet die
log4j.properties
Datei, die es gefunden hattarget/classes
!quelle
Ich hatte auch dieses Problem. Ich habe nur vergessen, das Ressourcenverzeichnis in IntelliJ IDEA zu markieren
quelle
Wenn Sie Eclipse verwenden und dieses Problem aus dem Nichts aufgetreten ist, nachdem zuvor alles einwandfrei funktioniert hat, versuchen Sie es mit
Project - Clean - Clean
.quelle
Meine Eclipse-Installation konnte
log4j.properties
beim Ausführen von JUnit- Tests in Eclipse nicht gefunden werden, obwohl sich die Datei unter befandsrc/test/resources
.Der Grund dafür war , dass Eclipse - (oder der M2e - Anschluss) ahmte nicht Inhalt von
src/test/resources
dem erwarteten Ausgabeordnertarget/test-classes
- die Ursache , dass die Eigenschaften in dem Projekt war unter Java Build Path -> Quelle Registerkarte -> Quellverzeichnisse auf Build - Pfad -> src / Test / Ressourcen , irgendwie gab es einenExcluded: **
Eintrag. Ich habe diesen ausgeschlossenen Eintrag entfernt.Alternativ kann ich manuell kopiert haben könnte
src/test/resources/log4j.properties
zutarget/test-classes/log4j.properties
.quelle
Wenn Sie
log4j.properties
sich tatsächlich im Klassenpfad befinden, verwenden Sie Spring Boot, um eine WAR-Datei für die Bereitstellung auf einem App-Server zuweb.xml
erstellen , lassen Sie eine Datei zugunsten der automatischen Konfiguration von Spring Boot aus und Sie erhalten keinerlei Protokollmeldungen, die Sie explizit benötigen Konfigurieren Sie Log4j. Angenommen, Sie verwenden Log4j 1.2.x:quelle
Vielleicht füge ich hinzu, dass das relevante Projekt log4j im Java-Build-Pfad enthält. Ich füge mahout_h2o hinzu, als ich dieses Problem in einem Mahout-Projekt mit Eclipse traf. Es funktioniert!
quelle
Wenn Sie mit vielen Projekten zusammenarbeiten, kann es zu Stilproblemen kommen.
* Sie müssen eine lof4j.properties-Datei haben und diese Datei enthält die Protokolleigenschaften eines anderen Projekts.
* Außerdem können Sie versuchen, log4j-Eigenschaftendateien in den src-Pfad zu stellen, wenn das Projekt ausgeführt wird. Linux-Betriebssysteme, Bibliotheken anderer Projekte und log4.properties-Dateien können sich unter einem Ordner an einem Speicherort im Klassenpfad befinden.
quelle
Erster Import:
Fügen Sie dann den folgenden Code zur Hauptmethode hinzu:
Erstellen Sie eine Datei im Pfad zu und fügen Sie den folgenden Code zu dieser Datei hinzu.
quelle
Die Lösung auf dieser Website funktionierte für mich https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/ . Ich sehe jetzt überhaupt keine Warnungen von log4j
Ich habe dies in eine log4j.properties-Datei eingefügt, die ich in src / main / resources abgelegt habe
quelle
Zunächst einmal: Erstellen Sie eine log4j.properties-Datei
Platziere es in src / main / resources /
Verwenden Sie danach diese 2 Abhängigkeiten:
Diese endgültige Abhängigkeit muss zur POM-Datei hinzugefügt werden:
quelle
Betrachten Sie das log4j JVM-Argument Dlog4j.configuration
Allgemein:
Fügen Sie das JVM-Argument hinzu, das auf die log4j-Konfigurationsdatei verweist. Die Syntax lautet wie folgt:
Ein Beispiel für eine echte Befehlszeile ist wie folgt:
Für IntelliJ IDE-Benutzer:
Tipps:
1.Eclipse IDE-Benutzer finden einen äquivalenten Ansatz
2. Für den Run / Debug-Konfigurationseditor ist es sehr wahrscheinlich, dass zu Beginn der Zeit Ihre bestimmte ausführbare Datei nicht vorhanden ist. Abhängig von der Größe des Projekts, an dem Sie gerade arbeiten, kann es unangenehm sein, in Verzeichnissen zu navigieren, um es zu finden. Es ist weniger problematisch, wenn Sie die Datei nur einmal ausführen / ausführen (auf Wiedergabe klicken), bevor Sie mit dem Ausführen / Debuggen der Konfiguration fortfahren, unabhängig vom Ausführungsergebnis.
3. Achten Sie auf Ihr Arbeitsverzeichnis, die relativen Pfade und den Klassenpfad.
quelle
Kopieren Sie in Java Eclipse Ihre Datei conf_ref in den Ordner conf.
quelle