簡體   English   中英

重定向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類的一部分,我使用該類從服務器中獲取信息。 當前的問題是我有一個記錄儀。 我想將記錄器的所有內容輸出到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM