web-dev-qa-db-fra.com

La méthode getLogger () n'est plus membre de Logger dans log4j2?

J'ai l'importation log4j-api-2.0.0.jar et log4j-core-2.0.2.jar dans mon chemin de génération. Mais en quelque sorte, le code suivant était un échec:

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

public class TheClass {

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

...

Et le message d'erreur indique que:

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

Je suis tellement curieux que getLogger() ne soit plus une méthode valide dans Logger?

12
huahsin68

Vous remarquerez Logger ne déclare plus une telle méthode.

la version 2 de log4j a apporté des changements radicaux. Voici le journal des modifications. getLogger semble avoir été déplacé vers une classe LogManager.

Voici comment ils suggèrent de faire la migration. 

21

Je donne un exemple pour une meilleure compréhension. 

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

avec le nouveau Log4J 2, vous devez ajouter au moins (dans mon cas) log4j-core-2.8.2, log4j-api-2.8.2 et dans certains autres cas, vous devrez peut-être également ajouter log4j-web-2.8.2. Ainsi, lorsque vous souhaitez obtenir une journalisation, vous importez import org.Apache.logging.log4j.LogManager; import org.Apache.logging.log4j.Logger;

et finalement l'utilisation sera static final Logger LOGGER = LogManager.getLogger(WebService.class.getName());

Remarque: n'oubliez pas de placer le fichier de configuration dans le répertoire racine du projet, sinon vous ne pourrez pas obtenir vos journaux.

J'espère que cela aidera quelqu'un Cordialement

Oui, votre observation est correcte. Elle ne prend pas en charge la méthode getLogger ().

Consultez ce lien de documentation à l’adresse: http://logging.Apache.org/log4j/2.x/log4j-core/apidocs/index.html

Exemple de tutoriel: http://www.javabeat.net/log4j-2-example/

2
pd30

Vous utilisez log4j version 2.

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

Comme indiqué dans d'autres réponses, Logger est maintenant une interface et vous pouvez obtenir des instances de consignateur à partir de LogManager.

L'API est maintenant distinct de l'implémentation, pour donner à l'équipe la liberté de changer d'implémentation sans altérer le code utilisateur. L'API changera rarement, et si cela change, ce sera dans une version 2.x, pas une version 2.0.x. Cela dit, il est probablement judicieux de toujours utiliser les versions correspondantes de log4j-api et log4j-core.

1
Remko Popma

Pour utiliser la méthode getLogger () sur votre classe, importez le Logger class 

import Java.util.logging.Logger;

et l'utiliser comme suit 

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

Et rappelez-vous, cette méthode prend un argument de chaîne.

Ou utilisez Logger de org.Apache.log4j package comme indiqué ci-dessous 

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