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

369

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?

maximus
quelle
5
Das scheint eine Laufzeitwarnung zu sein. Sind Sie sicher, dass Sie dies beim Kompilieren sehen?
Maba
5
Haben Sie versucht, die URL in der letzten Zeile der Warnungen zu besuchen?
Jesper
4
Ja!!! aber es sagt nicht viel ... Ich habe herausgefunden, dass ich eine Eigenschaftendatei benötige, um meinen Appender zu konfigurieren!
Maximus
Bearbeiten Sie die Konfigurationsdateien manuell, um den Appender hinzuzufügen. Stellen Sie sicher, dass Sie das richtige und gültige Konfigurationsdokument haben.
Roman C

Antworten:

464

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:

BasicConfigurator.configure();

Der zweite Ansatz besteht darin, diese Standarddatei log4j.properties(aus dem oben genannten Handbuch entnommen) zu Ihrem Klassenpfad hinzuzufügen :

# 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
quelle
3
Nur der erste Schritt ist in Ordnung. Zitat aus der kurzen Einführung in den log4j-Leitfaden
ray6080
65
Für neue Stolpersteine ​​... fügen Sie die Datei log4j.properties zu src / main / resources hinzu, und dies setzt voraus, dass Sie ein Maven-Projekt haben. Dinge in src / main / resources sind im Klassenpfad enthalten.
Keni
3
Öffnen Sie in der IntelliJ-Idee die Moduleinstellung, wählen Sie Ihren Ressourcenordner aus und klicken Sie auf Ressourcen. Dadurch wird automatisch jede Ressource zum Klassenpfad hinzugefügt.
Waqas
1
Hat nicht geholfen. Ich benutze Eclipse Neon für C ++ und habe die log4j.properties neben die ausführbare Eclipse-Datei gestellt und nicht geholfen
Nadav B
log4j.rootLogger=DEBUG, A1ist die Linie, die ich die ganze Zeit vermisst habe.
Mohammad Faisal
74

Es sieht so aus, als müssten Sie den Speicherort Ihrer log4j.propertiesDatei 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:

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

Die Fehlermeldung sollte nicht mehr angezeigt werden.

JDJ
quelle
Warnmeldungen werden jetzt nicht angezeigt, aber die Protokolle werden immer noch nicht an der gewünschten Stelle geschrieben
Arpan Saini
48

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
    
lancerex
quelle
Platzieren Sie die Datei log4j.properties im Ressourcenverzeichnis wie src / test / resource
Alok
Um eine explizite Deklaration des Pfads log4j.properties zu vermeiden; Platzieren Sie es in Ihrem Projektordner und greifen Sie darauf zu wie String log4jConfPath = System.getProperty ("user.dir") + File.separator + "log4j.properties";
Amimo Benja
36

Dies ist nur eine Warnung.

Festsetzung

Dies geschieht , wenn die Konfigurationsdateien standardmäßig log4j.propertiesund kann log4j.xmlnicht gefunden werden und die Anwendung führt keine explizite Konfiguration.

Um das zu beheben, einfach erstellen / kopieren log4j.propertiesoder log4j.xmlin 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.

log4jwird Thread.getContextClassLoader().getResource()zum Auffinden der Standardkonfigurationsdateien verwendet und überprüft das Dateisystem nicht direkt. Um den geeigneten Speicherort zu kennen log4j.propertiesoder log4j.xmldie Suchstrategie des verwendeten Klassenladeprogramms zu verstehen. log4jbietet keine Standardkonfiguration, da die Ausgabe an die Konsole oder an das Dateisystem in einigen Umgebungen möglicherweise verboten ist.

Debuggen

Zum Debuggen können Sie versuchen, -Dlog4j.debug=trueParameter zu verwenden .

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 es <solr>/example/resources/log4j.propertiesan eine Stelle im Klassenpfad .

Die Beispielkonfiguration log4j.propertiesvon Solr lautet wie folgt:

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

Kenorb
quelle
13

Die meisten Antworten hier deuteten darauf hin, dass die log4j.propertiesDatei am richtigen Speicherort abgelegt werden sollte (für ein Maven-Projekt sollte sie sich in befinden src/main/resources).

Aber für mich ist das Problem, dass meine log4j.propertiesnicht 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
Searene
quelle
1
Die Tatsache, dass log4j "Datei kann nicht gefunden werden" und "unvollständige Spezifikation in Datei" als denselben Fehler betrachtet, ist eine Zeitverschwendung.
Ed Norris
1
Für mich ist das die beste Antwort. Ich stimme ab und habe Ihrer Antwort einige Erklärungen hinzugefügt.
Schlebe
Die beste Antwort für mich !!!
Nasenqueaponer
8

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

Zunächst müssen Sie diese Zeile einfach zu Ihrer Hauptmethode hinzufügen:

BasicConfigurator.configure();

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.

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 von Protokolldateien erstellen.

AkashK
quelle
Ich hatte das gleiche Problem und habe BasicConfigurator.configure () verwendet. in der Hauptmethode und jetzt wird der Code ordnungsgemäß ausgeführt.
Surabhi Pandey
7

Sie verwenden das Loggerin Ihrem Code, um eine Nachricht zu protokollieren. Das Appenderist ein Objekt, das an a angehängt ist, Loggerum die Nachricht an ein bestimmtes Ziel zu schreiben. Es gibt FileAppenderin Textdateien ConsoleAppenderzu 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.

Simulant
quelle
6

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).

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >
glauben
quelle
Diese! Ich habe Stunden damit verbracht, eine Antwort zu finden. Mein Fallcode funktioniert gut unter Linux, aber habe diesen Fehler in Windows (gleiche NB IDE) und alle oben genannten Lösungen funktionieren nicht!
Tiana987642
5

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:

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
a3po2.0
quelle
Ich danke dir sehr!!! Jeder geht nur von Spring oder Tomcat aus oder was auch immer, um die Konfiguration zu initialisieren.
Windgazer
3

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

src/main/resources/log4j.propertiesist 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/

Jin Thakur
quelle
3

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.

ekjcfn3902039
quelle
3

Fügen Sie als ersten Code Folgendes hinzu:

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

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 ".

Antonio Martin
quelle
2

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:

# 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
quelle
1

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:

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

Und ich konnte es mit einer POM-Datei zum Laufen bringen, die Folgendes enthielt:

         <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
quelle
1

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:

  1. Lauf

  2. Konfigurationen ausführen

  3. Klassenpfad (Registerkarte)

  4. Benutzereinträge

  5. Glas rechts hinzufügen

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

  7. Anwenden

  8. Lauf

Die Fehlermeldung sollte nicht mehr angezeigt werden.

Varaj Vignesh
quelle
1

Der Grund kann staticin einigen Fällen das Fehlen des Wortes sein :

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

Wenn ich Logger zum Instanzfeld mache, erhalte ich genau diese Warnung:

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

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!

Gangnus
quelle
1

Ich hatte das gleiche Problem, als ich log4j2 verwendete. Mein Problem wird durch die Verwendung einer falschen abhängigen Bibliothek verursacht:

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

Stattdessen sollte ich verwenden:

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

In meinem Fall habe ich eine log4j2.xml in meinem "Ressourcen" -Verzeichnis definiert und angegeben, um sie zu verwenden durch:

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

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

  1. es suchen, um log4j.propertiesDatei zu finden
  2. Es wird gesucht, um die Appender-Definition in zu instanziieren log4j.properties

Wenn log4Jdie log4j.propertiesDatei nicht gefunden wird oder wenn der in deklarierte Appender log4j.rootloggernicht an anderer Stelle in der log4j.propertiesDatei definiert ist, wird die Warnmeldung angezeigt.

VORSICHT: Der Inhalt der Eigenschaftendatei muss korrekt sein.

Der folgende Inhalt ist NICHT korrekt

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

weil der fileAppender in der log4j.rootloggerAnweisung LOWER-CASE deklariert und in der Anweisung log4j.appender mit UPPER-CASE definiert ist!

Eine korrekte Datei wäre

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

Wenn MAVEN verwendet wird, müssen Sie die Dateien log4j.properties in src/main/resourcesAND ablegen und einen MAVEN-Build starten.

Die Datei Log4j.properties wird dann in den target/classesOrdner kopiert .

Log4J verwendet die log4j.propertiesDatei, die es gefunden hat target/classes!

schlebe
quelle
1

Ich hatte auch dieses Problem. Ich habe nur vergessen, das Ressourcenverzeichnis in IntelliJ IDEA zu markieren

  1. Klicken Sie mit der rechten Maustaste auf Ihr Verzeichnis
  2. Verzeichnis als markieren
  3. Ressourcen root
Sadap
quelle
1

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.

stijena
quelle
0

Meine Eclipse-Installation konnte log4j.propertiesbeim Ausführen von JUnit- Tests in Eclipse nicht gefunden werden, obwohl sich die Datei unter befand src/test/resources.

Der Grund dafür war , dass Eclipse - (oder der M2e - Anschluss) ahmte nicht Inhalt von src/test/resourcesdem erwarteten Ausgabeordner target/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 einen Excluded: **Eintrag. Ich habe diesen ausgeschlossenen Eintrag entfernt.

Alternativ kann ich manuell kopiert haben könnte src/test/resources/log4j.propertieszu target/test-classes/log4j.properties.

Abdull
quelle
0

Wenn Sie log4j.propertiessich tatsächlich im Klassenpfad befinden, verwenden Sie Spring Boot, um eine WAR-Datei für die Bereitstellung auf einem App-Server zu web.xmlerstellen , 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:

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
quelle
0

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!

Nachtwind
quelle
0

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.

Yasin
quelle
0

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
Himansug
quelle
0

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

# 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
quelle
0

Zunächst einmal: Erstellen Sie eine log4j.properties-Datei

# 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

Platziere es in src / main / resources /

Verwenden Sie danach diese 2 Abhängigkeiten:

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

Diese endgültige Abhängigkeit muss zur POM-Datei hinzugefügt werden:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
Nasenqueaponierer
quelle
0

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:

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

Ein Beispiel für eine echte Befehlszeile ist wie folgt:

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

Für IntelliJ IDE-Benutzer:

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

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.

Farlon Souto
quelle
-4

Kopieren Sie in Java Eclipse Ihre Datei conf_ref in den Ordner conf.

Anuj Pandey
quelle