我正在實現我的Logger類,但由於一個奇怪的原因構造函數方法從未被調用過。在其他課上,當我使用SRCLogger.getLogger().log(Level.INFO, "Message");
時,路徑上沒有創建日誌文件。構造函數在創建記錄器時未被調用java
我錯過了什麼?這段代碼有什麼問題?
這裏是我的代碼:
public final class SRCLogger implements Serializable{
private static final Logger l = Logger.getLogger("mySRCLogger");
private FileHandler fh;
private String ROOT_DIR = "C:\\Users\\Test\\Desktop\\";
public SRCLogger(){
System.out.println("Constructor.");
try {
fh = new FileHandler(ROOT_DIR + "SRCLog.log");
fh.setFormatter(new SimpleFormatter());
l.addHandler(fh);
System.out.println("Try.");
} catch (IOException ex) {
Logger.getLogger(SRCLogger.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Catch IOException.");
} catch (SecurityException ex) {
Logger.getLogger(SRCLogger.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Catch SecurityException.");
}
}
public static Logger getLogger(){
return l;
}
}
歡呼和預先感謝
所以,如果我想記錄器有處理程序,我應該把該處理程序的代碼放在靜態方法而不是構造函數? – BRabbit27 2012-03-21 17:38:22
@ BRabbit27:你不是在寫一個*處理程序* - 你只是在創建一個'FileHandler'。將該處理程序添加到記錄器的代碼可以是靜態方法,是的。 – 2012-03-21 17:41:02
你應該有一個靜態方法'private static init()',它應該包含你在構造函數中執行的所有任務。如果已經調用了'init',則可以保留一個布爾標誌。在'getLogger()'你應該檢查該標誌,如果它的'false'然後調用'init'否則不要 – 2012-03-21 17:49:55