2016-01-13 81 views
0

我正在做一個記錄器類,並且我將代碼從println語句切換到做一個printwriter,但是,出現了問題,我找不出什麼。有人可以幫忙嗎?我知道問題出在Log方法的某個地方,但我不知道我能做些什麼來解決它。與我的記錄器printwriter問題

package com.company; 

import java.io.PrintWriter; 

enum MessageLevel {FatalError, LesserError, Warning, Info} 

public class Logger 
{ 
private static PrintWriter writer; 
public boolean Initialize (String logfilename) 
{ 
    try 
    { 
     writer = new PrintWriter("logfile.log"); 
    } 
    catch (java.io.FileNotFoundException e) 
    { 
     System.err.println("Your file " + logfilename +" is unable to open for write.\n"); 
    } 

    writer.write("Hello World! \n"); 
    writer.flush(); 
    writer.close(); 

    return true; 
} 

private static void WriteLog (String msg) 
{ 
    writer.write(msg); 
} 

private static String GetLevelString (MessageLevel level) 
{ 
    switch (level) 
    { 

     case FatalError: 
      return "Fatal Error: "; 

     case LesserError: 
      return "Lesser Error: "; 

     case Warning: 
      return "Warning: "; 

     case Info: 
      return "Info: "; 
    } 
    return "programmer error: missing level"; 
} 

public static void Log (MessageLevel level, String msg) 
{ 
    writer.write(WriteLog(GetLevelString(level) + msg)); 
} 
+3

到底出了什麼問題?你是否收到錯誤信息? – Svea

+0

你能告訴我們什麼是錯的嗎?或者你期待的是什麼? – Rafael

回答

0

由於您未給PrintWriter中的寫入方法提供正確的參數,因此日誌方法會顯示錯誤信息。那,你正在試圖一次寫兩次。

writer.write(WriteLog(GetLevelString(level) + msg)); 

您的方法WriteLog是void,因此它不返回要寫入的字符串。並且WriteLog已經寫入了你給它的字符串,所以要麼使用writer.write()方法,要麼使用你的WriteLog方法(它做同樣的事情)。

writer.write(GetLevelString(level) + msg); 

或者

WriteLog(GetLevelString(level) + msg); 

希望它幫助。

+0

另外,您需要添加一個額外的支架才能完成課程正文。 – PabloJ