我有一個子類和一個超類。在超類中,我有一個記錄某些東西的方法。當我創建子類的實例時,記錄器爲超類創建日誌消息。爲什麼這會發生?如何獲取子類的記錄器?
代碼例如:
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();
}
}
輸出:
SubClass
Mar 15, 2013 6:30:04 PM SuperClass logAndPrintClass
INFO: Logmessage
正如可以看到的類的名稱被正確地打印,但在日誌消息錯誤地表示。
實際上,在Logger.log()調用後面隱藏的LogRecord對象正在子類中創建。 – parsifal 2013-03-15 18:34:34
我不想爲了記錄而重寫每個子類中的方法。在生產代碼中,不僅僅是打印和記錄消息。問題中的代碼只是具有相同行爲的最簡單的示例。 – Paling 2013-03-15 18:36:49