重定向 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();
}
};
我有以下代码:
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();
}
};