2016-04-26 27 views
0

我已经构建了一个使用外部罐子的Java控制台程序。我想在控制台中观察我自己的System.out.println日志,但是它们大部分都会被某些Logger(来自软件包org.slf4j;)生成的控制台上的消息所淹没,该消息会输出大量文本。Java:如何仅显示System.out.print调用?

我的问题是我不能改变使用的记录器的代码,因为它是在一个罐子里包着的,没有它的来源。有没有办法只显示我的System.out.println电话?或者以其他方式安静通过此代码生成的消息我没有源代码?

谢谢!

+1

可能更改日志级别省略大部分消息。 –

+0

如何做到这一点? – ThePartyTurtle

+0

@KevinO为您的问题解决了更详细的问题。 –

回答

1

有一对夫妇的做法。

  1. 更改日志级别或位置。除非以编程方式设置,否则SLF4j系统有一个配置文件。修改级别,使其仅显示警告或仅显示错误。或者,更改记录器,使其转到文件而不是stdout。

  2. 如果你在一个* nix系统上,并根据你如何调用程序,可以做类似于java PROGRAM | grep -v "org.slf4j"(或者任何包)。这种方法将删除与显示相匹配的所有行。

0

这听起来像你正在使用的使用SLF4J其日志记录,这是一个相当标准的库库。虽然所有这些库都可以做有用的事情,但有一点很有帮助,使用它们的挑战之一是需要将它们的日志记录集成到应用程序使用的日志中。 SLF4J提供了许多库使用的标准日志记录界面,并允许它们绑定到Logback或log4j等standard logging implementation

我希望大多数使用SLF4J的库将取决于只有SLF4J的API,并没有一个具体的日志实现他们的依赖性结合。默认情况下,SLF4J使用“no-op”记录器,这意味着不输出日志记录(除了初始警告,它就是这样做的)。如果您想要进行测试,可以添加slf4j-nop库来删除所有日志记录。

但因为你实际看到的输出,似乎你正在使用的图书馆也是因某些原因包括结合到实际的日志框架。在这一点上,您的选择是:

  1. 找出绑定和实际日志框架如何进入您的类路径并将其删除。 (如果你使用Maven来管理你的依赖,例如,你可能会为他们添加一个<exclude>元素。),或
  2. 图出正在使用的日志框架(如果你使用Maven的,我觉得依赖:树型输出很有用),本质上也是将它用于您的应用程序,并将其配置为以您想要的方式进行记录,从而隐藏您认为不相关的消息。

如果当初你是如何在你的应用程序获得这个库的依赖关系(我已经给信息Maven的,因为它是我最熟悉的,它是相当标准)的详细信息,或者什么日志框架你从而无意中添加到您的应用程序,有人可能能够进一步指导您。

相关问题