2017-08-06 17 views
0

私は、次のコードを持っている:リダイレクトSystem.out.errは動作しません

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 Consoleにすべてのロガーを出力したいが、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 

しかし、これはのSystem.outを持つ唯一のすべて、PC上でのTelnetコンソールにプリントアウトされません。なぜ誰にも分かりませんか?

答えて

0

新しいハンドラを作成して問題を修正しました。判明したように、古い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(); 
     } 
    }; 
関連する問題