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

相关问题