wake-up-neo.net

Methode getLogger () ist in log4j2 kein Mitglied mehr von Logger?

Ich habe den Import von log4j-api-2.0.0.jar und log4j-core-2.0.2.jar in meinen Erstellungspfad. Aber irgendwie ist folgender Code fehlgeschlagen:

import org.Apache.logging.log4j.core.Logger;

public class TheClass {

    private static Logger log = Logger.getLogger(TheClass.class);

...

Und die Fehlermeldung zeigt, dass:

The method getLogger(Class<TheClass>) is undefined for the type Logger

Ich bin nur so neugierig, ob getLogger() in Logger keine gültige Methode mehr ist.

12
huahsin68

Sie werden feststellen, dass Logger eine solche Methode nicht mehr deklariert.

log4j Version 2 hat einige drastische Änderungen vorgenommen. Hier ist das Änderungsprotokoll. getLogger scheint in eine LogManager-Klasse verschoben worden zu sein.

Hier ist wie sie die Migration vorschlagen. 

21

Ich gebe ein Beispiel zum besseren Verständnis. 

private static Logger logger;
        static {
            try {   
                   // you need to do something like below instaed of Logger.getLogger(....);
                    logger = LogManager.getLogger(ResourceService.class); 
              } catch (Throwable th) {
                    throw new HRException("Cannot load the log property file", th);
            }
        }
8
RajeeV VenkaT

mit dem neuen Log4J 2 müssen Sie mindestens (in meinem Fall) log4j-core-2.8.2, log4j-api-2.8.2 und in einigen anderen Fällen auch log4j-web-2.8.2 hinzufügen. Wenn Sie also eine Protokollierung erhalten möchten, importieren Sie import org.Apache.logging.log4j.LogManager; import org.Apache.logging.log4j.Logger;

und schließlich wird die Verwendung static final Logger LOGGER = LogManager.getLogger(WebService.class.getName()); sein

Hinweis: Vergessen Sie nicht, die Konfigurationsdatei im Stammverzeichnis des Projekts abzulegen. Andernfalls können Sie Ihre Protokolle nicht abrufen.

Ich hoffe, das hilft jemandem Herzliche Grüße

Ja, Ihre Beobachtung ist korrekt. Die Methode getLogger () wird nicht unterstützt.

Überprüfen Sie diesen Link zur Dokumentation: http://logging.Apache.org/log4j/2.x/log4j-core/apidocs/index.html

Beispiel-Tutorial: http://www.javabeat.net/log4j-2-example/

2
pd30

Sie verwenden log4j Version 2.

private static final Logger LOGGER = LogManager.getLogger(TheClass.class);
1
Pranav V R

Wie bereits in anderen Antworten erwähnt, ist Logger jetzt eine Schnittstelle, und Sie können Logger-Instanzen von der LogManager abrufen.

Die API ist jetzt von der Implementierung getrennt, um dem Team die Freiheit zu geben, die Implementierung zu ändern, ohne den Benutzercode zu brechen. Die API ändert sich selten, und wenn sie sich ändert, liegt sie in einer 2.x-Version vor, nicht in einer 2.0.x-Version. Das heißt, es ist wahrscheinlich eine gute Idee, immer passende log4j-api- und log4j-core-Versionen zu verwenden.

1
Remko Popma

Um die getLogger () - Methode in Ihrer Klasse zu verwenden, importieren Sie die Logger -Klasse 

import Java.util.logging.Logger;

und benutze es wie folgt 

public class SpringBoot {
  private static final Logger LOGGER = Logger.getClass("SpringBoot");
}

Denken Sie daran, dass diese Methode ein String-Argument benötigt.

Oder Verwenden Sie Logger aus dem Paket org.Apache.log4j , wie unten gezeigt 

import org.Apache.log4j.Logger;

public class MessageProcessor {

private static final Logger LOGGER = Logger.getLogger(MessageProcessor.class);

public void processMessage(Message<String> msg) {
    LOGGER.info("Message is about to be processed");
}
0
tadtab