重定向System.out.err不起作用

时间:2017-08-06 12:09:35

标签: java class logging console telnet

我有以下代码:

private void replaceStdIo(SocketChannel socketChannel) throws IOException {
        socketChannel.configureBlocking(blockingMode);
        InputStream in = new RedirectorInputStream();
        PrintStream out = new PrintStream(new RedirectorOutputStream(), false, charsetEncoding);
        System.setIn(in);
        System.setErr(out);
        System.setOut(out);
    }

它是一个更大的Telnet类的一部分,我用它来从我的服务器中获取Info。目前的问题是我有一个记录器。我想将记录器的所有内容输出到Telnet控制台,但只有System.out.print可以正常工作。 System.err也应该可以工作,但由于某些原因它不是吗?

这是IDE中的控制台输出:

14:06:42:0723.: From ConsoleIn.java -> Found the Commandinput FINEST in 
setDebugLevel(FINEST)
14:06:42:0725.: From Debug.java -> Set debugLevel to FINEST

但这不会在PC上的Telnet控制台中打印出来,只有System.out中的所有内容都打印出来。有谁知道为什么?

1 个答案:

答案 0 :(得分:0)

我通过创建一个新的Handler修复了我的问题。事实证明,旧的consoleHandler阻止了对System.err的拦截。通过创建我自己的新Handler并取出consoleHandler,它最终工作了。

新的,有效的代码:

var longestNumber = arr[i];
if(arr[i] > longestNumber){