2012-02-16 86 views
9

使用java.util.logging.Logger中輸出一些日誌到控制檯,就像這樣:有什麼辦法從java.util.logging.Logger輸出中刪除信息行嗎?

public static void main(String[] args) { 
    Logger logger = Logger.getLogger("test"); 
    logger.info("Hello Wolrd!"); 
} 

輸出是:

FEB 16, 2012 10:17:43 AM com.abc.HelloWorld main 
INFO: Hello World. 

這似乎是好了,但是......

我們在所有Ant任務(內部標準)中使用java.util.logging.Logger,並且我們有一個大的ant項目。一個完整週期的控制檯輸出可以大於300KB,其中我們自己的記錄器輸出至少取50個。

現在我不想看到Level.INFO輸出的時間,類名和方法的信息。信息線也使得難以專注於自定義消息。

所以有任何方法,以除去從各輸出的第一條線(時間戳,類和方法的信息)(或只從每個Level.INFO輸出)?

+1

@ziesemer不錯。製作一個格式化程序,將其設置爲處理程序,將該處理程序添加到記錄程序中,並將記錄程序設置爲不使用父級處理程序。 Upvote幫助〜 – coolcfan 2012-02-16 03:20:41

回答

6

參見How do I get java logging output to appear on a single line?。但是,唯一的區別是刪除第一行,而不是將它放在一行上。

要僅對INFO級別執行此操作,請擴展您想要有條件修改的格式化程序(例如SimpleFormatter),並覆蓋format方法。你可以做這樣的事情:

public String format(LogRecord record){ 
    if(record.getLevel() == Level.INFO){ 
    return record.getMessage() + "\r\n"; 
    }else{ 
    return super.format(record); 
    } 
} 

如果您只爲INFO這樣做,你可能並不需要的「信息:」前綴 - 但你可以重新添加它。如果你願意的話。

+0

閱讀javadoc之後...我不得不說我討厭java日誌的實現。如果我想讓一個處理程序只應用於Level.INFO,我必須擴展Handler。爲此,我不能使用父級的處理程序爲Level.SEVERE,所以我必須添加另一個處理程序... – coolcfan 2012-02-16 03:46:58

+0

這是我使用SLF4J和logback的原因之一,只要有可能... – ziesemer 2012-02-16 03:49:34

+0

行...好的更新。 – coolcfan 2012-02-16 06:28:48

相關問題