2012-05-17 68 views
0

我需要使用Apache常見的簡單日誌將日誌寫入文本文件,而不是將其打印到System.err中。Simple Logger apache common

我在寫入方法中使用FileWriter,它創建文件但不打印緩衝區中的數據。

protected void log(int type, Object message, Throwable t) { 

    StringBuffer buf = new StringBuffer(); 


    if(showDateTime) { 
     Date now = new Date(); 
     String dateText; 
     synchronized(dateFormatter) { 
      dateText = dateFormatter.format(now); 
     } 
     buf.append(dateText); 
     buf.append(" "); 
    } 


    switch(type) { 
     case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break; 
     case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break; 
     case SimpleLog.LOG_LEVEL_INFO: buf.append("[INFO] "); break; 
     case SimpleLog.LOG_LEVEL_WARN: buf.append("[WARN] "); break; 
     case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break; 
     case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break; 
    } 


    if(showShortName) { 
     if(shortLogName==null) { 

      shortLogName = logName.substring(logName.lastIndexOf(".") + 1); 
      shortLogName = 
       shortLogName.substring(shortLogName.lastIndexOf("/") + 1); 
     } 
     buf.append(String.valueOf(shortLogName)).append(" - "); 
    } else if(showLogName) { 
     buf.append(String.valueOf(logName)).append(" - "); 
    } 


    buf.append(String.valueOf(message)); 


    if(t != null) { 
     buf.append(" <"); 
     buf.append(t.toString()); 
     buf.append(">"); 

     java.io.StringWriter sw= new java.io.StringWriter(1024); 
     java.io.PrintWriter pw= new java.io.PrintWriter(sw); 
     t.printStackTrace(pw); 
     pw.close(); 
     buf.append(sw.toString()); 
    } 


    write(buf); 

} 



protected void write(StringBuffer buffer) { 

     System.err.println(buffer.toString());// want to print to a file rather than to err 

    FileWriter file=new FileWriter(new File("d:/log.txt")); 
    file.write(buffer.toString()); 


} 

回答

1

您需要flush the stream

file.flush() 

,或者如果你真的做寫你需要close the writer文件。 :

file.close() 

close()在關閉之前刷新流。

+0

謝謝u..i總是forgot..it沒有工作 – Avinash

+0

但問題是,當我打電話超過一個日誌級別的輸出被覆蓋掉了。例如,當我把這些三種方法將只得到輸出的最後一個打印在文件上 logger.info(「message :); logger.debug(」message「); logger.fatal(」message「); 請在此建議我。 。 – Avinash

+0

它的工作..使用BufferWriter .. – Avinash

0

這打破了SimpleLog恕我直言的目的。如果你想要更復雜的功能,比如寫入文件而不是控制檯,最好是插入log4j,或者使用jdk日誌記錄來恢復公共日誌記錄。兩種方法都可以在配置中而不是在代碼中保留文件寫入選項(文件名,大小限制,翻轉,格式)。