2011-08-12 88 views
4

我想在打印出控制檯之前格式化日誌消息Logger.fine如何格式化我的日誌消息

例如,我如何格式化「{0}有{1}蘋果與他」,所以輸入是約翰和10

我寧願一個日誌框架,它提供了一個解決方案,我不想格式化這些消息分別。 JDK6特定的日誌記錄類似乎沒有這些粒度。

+1

:// WWW

public class MyFormatter extends Formatter { /** * @see java.util.logging.Formatter#format(java.util.logging.LogRecord) */ @Override public String format(final LogRecord record) { return MessageFormat.format(record.getMessage(), record.getParameters()); } } 

然後使用它,你可以配置logging.properties文件用。 slf4j.org),你可以寫下:'log.debug(「{} has {} with Apple」,「John」,10);'SLF4J有一個綁定,可以重定向到'java.util.logging'。 –

+1

請重新說明問題。令牌化是將一個字符串分解爲組成部分並生成輸出而不是輸入。你的例子表明你問的是如何格式化,而不是標記。 –

回答

11

使用MessageFormat

String s = MessageFormat.format("{0} has {1} apples with him", "John", 10); 

String.format

String s = String.format("%1$s has %2$d apples with him", "John", 10); 
+0

對於這樣的簡單情況,您可以省略'1 $'和'2 $',並使用'「%s擁有%d個蘋果」的String.format()'。 –

+0

+1爲MessageFormat –

+0

+1爲MessageFormat - 我能夠將所有的日誌語句轉換爲使用MessageFormat將很少的努力 – Julie

0

只需使用String.format

String.format 
    ("%s has %s apples with him", "John", "10"); 
+0

當直接用於日誌記錄時,String.format會有性能損失 – Suryavanshi

4

即使只JDK日誌,你可以使用自定義Formatter處理格式化帶參數的日誌消息。

對於(一個簡單的)例子:如果你使用[SLF4J(HTTP

java.util.logging.ConsoleHandler.formatter = com.example.MyFormatter