[英]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類的一部分,我使用該類從服務器中獲取信息。 當前的問題是我有一個記錄儀。 我想將記錄器的所有內容輸出到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();
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.