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?
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.
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);
}
}
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/
Vous utilisez log4j version 2.
private static final Logger LOGGER = LogManager.getLogger(TheClass.class);
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.
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");
}