Ich habe eine Unterklasse und eine Oberklasse. In der Oberklasse habe ich eine Methode, die etwas protokolliert. Wenn ich eine Instanz der Unterklasse erstelle, erstellt der Logger eine Protokollierungsnachricht für die Superklasse. Warum passiert dies?Wie bekomme ich einen Logger für eine Unterklasse?
Code-Beispiel:
SuperClass.java
import java.util.logging.Level;
import java.util.logging.Logger;
public abstract class SuperClass {
public void logAndPrintClass(){
String name = this.getClass().getName();
System.out.println(name);
Logger logger = Logger.getLogger(name);
logger.log(Level.INFO, "Logmessage");
}
}
SubClass.java
public class SubClass extends SuperClass {
}
TestLogBubClass.java
public class TestLogBubClass {
public static void main(String[] args){
SuperClass obj = new SubClass();
obj.logAndPrintClass();
}
}
Ausgang:
SubClass
Mar 15, 2013 6:30:04 PM SuperClass logAndPrintClass
INFO: Logmessage
Wie Sie sehen, ist der Name der Klasse korrekt gedruckt, aber in der Protokollnachricht falsch dargestellt.
Es ist eigentlich, dass das LogRecord-Objekt, das hinter dem Aufruf von logger.log() versteckt ist, in der Unterklasse erstellt wird. – parsifal
Ich möchte nicht die Methode in jeder Unterklasse aus Gründen der Protokollierung überschreiben. Im Produktionscode kann mehr als nur eine Nachricht gedruckt und protokolliert werden. Der Code in der Frage ist nur das einfachste Beispiel mit dem gleichen Verhalten. – Paling