重定向 System.out.err 无效

Redirecting System.out.err does not work

我有以下代码:

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 Class 的一部分,我用它从我的服务器中获取信息。当前的问题是我有一个记录器。我想将记录器的所有内容输出到 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 的所有内容。有人知道为什么吗?

我通过创建一个新的处理程序解决了我的问题。事实证明,旧的 consoleHandler 阻止了 System.err 的拦截。通过创建我自己的新 Handler 并删除 consoleHandler,它最终可以正常工作。

新的工作代码:

telnetHandler = new Handler() {
        @Override
        public void publish(LogRecord record) {
            System.err.println(record.getMessage());
        }

        @Override
        public void flush() {
            System.err.flush();
        }

        @Override
        public void close() throws SecurityException {
            System.err.close();
        }
    };