【问题标题】:Java: Block method from using standard outputJava:阻止使用标准输出的方法
【发布时间】:2018-08-21 20:54:39
【问题描述】:

我在 Java 中使用专有 API。它的connect 方法在我的标准输出上释放了大量的日志消息。这使我无法从自己的记录器中读取消息。不幸的是,API 的setOut 方法不起作用。

有没有办法阻止connect 方法写入标准输出?

【问题讨论】:

  • 也许我不明白这个问题,但您可以在调用连接方法之前将“System.out”设置为一个虚拟输出文件。
  • 如果它使用System.out,那么System.setOut 应该可以工作。如果它使用其他方式(例如 JNI 和写入标准输出),那就很复杂了。在 C 中,你会做这样的事情:oldout = dup(stdout); close(stdout); open("/dev/null"); ...; close(stdout); dup(oldout); close(oldout);
  • 找出 API 正在使用的记录器并降低其日志级别。向供应商投诉。

标签: java output


【解决方案1】:

您可以在调用适当的方法之前使用System.setOut(new PrintStream(new ByteArrayOutputStream()));(您可能希望也可能不希望保存对 ByteArrayOutputStream 的引用),因为您不能修改方法本身,并且在调用它之后使用System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

【讨论】:

  • 我创建了一个Null OutputStream 并设置了System.setOut(new PrintStream(new NullOutputStream()));。这会阻止我通过System.out.println("..."); 发送的所有内容,但不会阻止 API 输出(奇怪的是,也不会阻止我的记录器的输出)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
相关资源
最近更新 更多