Bonjour,
J’ai dû rater une subtilité grosse comme une poutre, mais je dois admettre que cela me laisse dubitatif.
J’ai créé une classe destiné, à terme, à ma faciliter la gestion des logs (basés sur Log4J).
Comme vous le constatez, cette classe hérite de org.apache.log4j.Logger.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import org.apache.log4j.*; public class Log extends Logger { static final Logger logger = Logger.getLogger("MonLog"); /** Creates a new instance of Log */ protected Log(String name) { super(name); BasicConfigurator.configure(); logger.setLevel(Level.INFO); } /* Je compte placer ici mes fonctions perso */ }
Lorsque j’utilise cette classe
Je me retrouve avec une exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public static void main(String args[]) { Log log = new Log("MonLog"); log.info("Mon texte à afficher"); }
Alors que si je complète ma classe Log avec une méthode info() qui se contente de faire appel à son homologue dans Logger :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Exception in thread "main" java.lang.NullPointerException at org.apache.log4j.Category.info(Category.java:753) at TstMain.main(TstMain.java:21) Java Result: 1
Cela fonctionne très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import org.apache.log4j.*; public class Log extends Logger { static final Logger logger = Logger.getLogger("MonLog"); /** Creates a new instance of Log */ protected Log(String name) { super(name); BasicConfigurator.configure(); logger.setLevel(Level.INFO); } public void info(Object message) { logger.info(message); } /* … Je compte placer ici mes fonctions perso */ }
Bref, il y a-t-il une subtilité dans la classe Logger que je n’aurais pas perçu ?
Celle-ci héritant de la classe Category (qui implémente la méthode info()), je trouve normal de pouvoir acceder à la méthode depuis un objet Logger. Cependant, je ne vois pas pourquoi mon objet Log (héritant lui-même de Logger) ne peux pas exploiter la méthode info() sans avoir à la redéfinir.
Quelqu’un est-il plus inspiré que moi ?
Chris
Partager