2013-06-25 18 views
0

我按照本指南將記錄儀信息輸出到格式化FileHandler的文件。格式化記錄器文件處理程序問題

public class TestLog { 

public static Logger logger; 

static { 
try { 
    boolean append = true; 
    FileHandler fh = new FileHandler("TestLog.log", append); 
    fh.setFormatter(new Formatter() { 
    public String format(LogRecord rec) { 
     StringBuffer buf = new StringBuffer(1000); 
     buf.append(new java.util.Date()); 
     buf.append(' '); 
     buf.append(rec.getLevel()); 
     buf.append(' '); 
     buf.append(formatMessage(rec)); 
     buf.append('\n'); 
     return buf.toString(); 
     } 
     }); 
    logger = Logger.getLogger("TestLog"); 
    logger.addHandler(fh); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 
} 

引導顯示輸出將打印在新的一行的每個新記錄信息,

Mon Feb 28 21:30:54 EST 2005 SEVERE my severe message 
Mon Feb 28 21:30:54 EST 2005 WARNING my warning message 
Mon Feb 28 21:30:54 EST 2005 INFO my info message 

然而,沒有新的線被所附文件中,或它們在StringBuffer的,然後一個新的創建,它以某種方式丟失。有人能解釋這個問題嗎?謝謝。

我的方法/記錄器不是靜態的,這是否會導致問題?

+0

你試圖解決什麼問題?輸出你想要實現的內容,它的日誌框架的默認功能,你需要設置* pattern *的輸出。 –

+0

新行不會被添加到文件中,所有內容都在一行中。這是可讀性的問題。 – PandaBearSoup

+0

你正在編寫日誌框架! –

回答

2

我能解決問題。本教程構建格式化因爲如此,

fh.setFormatter(new Formatter() { 
public String format(LogRecord rec) { 
    StringBuffer buf = new StringBuffer(1000); 
    buf.append(new java.util.Date()); 
    buf.append(' '); 
    buf.append(rec.getLevel()); 
    buf.append(' '); 
    buf.append(formatMessage(rec)); 
    buf.append('\n'); 
    return buf.toString(); 
    } 
    }); 

的問題是,這實際上並沒有追加而不是使用文件中的新行,

buf.append('\n'); 

你需要使用

buf.append(System.getProperty("line.separator")); 

我的文件現在是可讀的,而不是連接線的混亂。希望這有助於未來的人。

1

Filehandler Tutorial

本教程顯示,你必須沖洗,然後加入消息後關閉處理程序。

+0

我在每次登錄後刷新處理程序,並在關閉應用程序之前關閉處理程序。 – PandaBearSoup

+0

對不起,我完全誤解了你的問題。我認爲文本中沒有添加任何行,不僅是新行。儘管找到答案不錯! – Zeh