Java将sysout重定向到jar中的类之外
我想重定向/隐藏由以下代码生成的sysout:Java将sysout重定向到jar中的类之外,java,redirect,jar,system.out,Java,Redirect,Jar,System.out,我想重定向/隐藏由以下代码生成的sysout: Tools tool = new ToolsImpl(); HashCode hash = tool.computeHashCodes(dir); PrintStream printStreamOriginal=System.out; System.out.println("sysout deactivated"); System.setOut(new PrintStream(new OutputStream() { public voi
Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
PrintStream printStreamOriginal=System.out;
System.out.println("sysout deactivated");
System.setOut(new PrintStream(new OutputStream() {
public void write(int b) {}
}));
System.out.println("Text to delete");
Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
System.setOut(printStreamOriginal);
System.out.println("sysout reactivated");
困难的部分是:computeHashCodes方法存储在一个jar中
我尝试了以下代码:
Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
PrintStream printStreamOriginal=System.out;
System.out.println("sysout deactivated");
System.setOut(new PrintStream(new OutputStream() {
public void write(int b) {}
}));
System.out.println("Text to delete");
Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
System.setOut(printStreamOriginal);
System.out.println("sysout reactivated");
要删除的文本确实已被删除,但由.computeHashCodes生成的sysout未被删除。有人知道如何隐藏这个系统吗
Thx提前,
Mike您的解决方案在使用System.out时运行良好,因此我猜您要阻止的代码没有使用System.out作为输出。尝试找出输出是如何完成的,这样您就可以阻止它。您的解决方案在使用System.out时运行良好,因此我猜您要阻止的代码没有使用System.out进行输出。尝试查找输出是如何完成的,以便您可以阻止它。代码可能正在写入System.err
尝试相同的练习,但使用System.err而不是System.out。代码可能正在写入System.err 尝试相同的练习,但使用System.err而不是System.out。请参见此处: 请看这里:
谢谢大家,我终于避免了显示sysout 当Magodiez建议我找出输出是如何完成的时,我认为我不能这样做,因为我无法访问源代码;但后来我意识到我只需要反编译代码 所以我用反编译了它,然后我看到了输出是如何完成的:
LOGGER.log(Level.INFO, str2);
然后,我使用以下行解决了我的问题:
java.util.logging.Logger.getLogger("log.tools").setLevel(Level.SEVERE);
这实际上是我真正想要的,现在只有严重的消息将打印在sysout上
再次感谢 谢谢大家,我终于避免了显示sysout 当Magodiez建议我找出输出是如何完成的时,我认为我不能这样做,因为我无法访问源代码;但后来我意识到我只需要反编译代码 所以我用反编译了它,然后我看到了输出是如何完成的:
LOGGER.log(Level.INFO, str2);
然后,我使用以下行解决了我的问题:
java.util.logging.Logger.getLogger("log.tools").setLevel(Level.SEVERE);
这实际上是我真正想要的,现在只有严重的消息将打印在sysout上
再次感谢 嗨,谢谢你的快速回答!我可以使用jar中的类,但不幸的是,我没有访问源代码的权限,所以我不知道输出是如何完成的。但是,难道不是因为类在一个单独的jar中导致了sysout的显示吗?不,只是尝试了一下,并且与System.out在一个外部的.jar中工作良好。确保它没有与System.err一起显示,就像ThorbjørnHi说的那样,谢谢你的快速回答!我可以使用jar中的类,但不幸的是,我没有访问源代码的权限,所以我不知道输出是如何完成的。但是,难道不是因为类在一个单独的jar中导致显示sysout吗?不,只是尝试过了,并且可以与System一起工作。out在一个外部的.jar中确保它没有与System一起显示。err正如ThorbjørnHi所说,我刚刚尝试过,但仍然无法工作。生成的sysout被归类为信息,这就是我使用System.out的原因。Thx:所以基本的问题实际上不是你想要输出被吞没,而是你想要一些特定的日志语句被忽略。请尝试重新配置您的日志后端。您好,我刚刚尝试过,但仍然无法工作。生成的sysout被归类为信息,这就是我使用System.out的原因。Thx:所以基本的问题实际上不是你想要输出被吞没,而是你想要一些特定的日志语句被忽略。请尝试重新配置您的日志后端。您可以尝试在新的System.out stream中是否有任何内容,方法是打印出写入中的内容。。。如果没有,computeHashCodes就不会通过System.outHi打印出来。我已经尝试过了,实际上write方法没有打印出任何内容。jar中的computeHashCodes方法没有使用任何System.out.println,而是使用了。请看我下面的答案,我描述了如何避免显示sysout。您可以尝试在新的System.out流中是否有任何内容,方法是打印出写入中的内容。。。如果没有,computeHashCodes就不会通过System.outHi打印出来。我已经尝试过了,实际上write方法没有打印出任何内容。jar中的computeHashCodes方法没有使用任何System.out.println,而是使用了。看看下面的答案,我描述了如何避免显示sysout。