2010-03-08 31 views
8

我正在使用一个库,当我参考它时,会向控制台输出一堆多余的信息。有没有办法让图书馆的输出消失?如何阻止Java库打印到控制台?

+1

哪个库是类似的方法signatutes全部更换sys.out.printXXx? – Romain 2010-03-08 17:58:34

回答

15

如果使用日志框架(log4j,commons-logging等),则可以编辑/创建属性文件来指示高日志记录阈值。在log4j的,这将是这样的:

log4j.logger.org.library=error 

如果磁带库使用System.out,这不是摆在首位好的库。您可以致电System.setOut(yourDummyPrintStream)(和System.setErr(..))更改PrintStream。您的虚拟打印流只会吞下数据,而不会打印到任何地方。

0

我不认为任何像样/理智的图书馆都使用System.out来记录消息。所以我可以放心地假设它使用某种记录框架。将特定软件包配置为处于更高日志记录级别,如“错误”或“致命”,以便您不会看到这些消息。

0

该库可能使用记录器,log4j或slf4j。您可以为该记录器创建配置文件,然后将日志级别设置为WARN或更高。这将停止打印信息。

7

您是否尝试过使用System.setOut()System.setErr()来设置OUT和ERR通道?

4

我投了简的答案,并想补充:

使用放样意味着你不能打印到在你的程序的System.out了。

你可以做

PrintStream oldOut=System.out 

首先要保存它,然后调用专列去改变它 - 然后就打印到oldOut。

我已经使用它作为迷你日志记录器 - 抓住System.out,用自己的流替换它,并让我自己的流抓取堆栈跟踪并找出调用方法,以便它可以在转发到原始System.out之前添加方法名称。

非常慢,但很好的调试。有一个设置,所以你可以恢复到只是打印字符串,隐藏所有输出或筛选消息来自哪个方法(这是我的主要用法,隐藏所有其他垃圾,所以我可以看到我自己的输出)。

2

考虑使用AspectJ,它可以用你所选择的语句来替换所有的System.out.println(),这是一个日志语句。这也适用于第三方jar文件(查找加载时织入)。

0

如果LIB使用打印我会使用ASM与另一个类的调用与燕子等