4

小さなツールをハックする必要があります。いくつかのファイルを読み取り、それらを変換する必要があります。現在、それは私のIDEで動作します。ユーザーのために、ログ出力を表示するだけの小さな UI を追加したいと思います。

ログバック用のすぐに使える Swing アペンダーを知っていますか? または、System.out を、テキスト フィールドと「閉じる」ボタンだけの小さな UI にリダイレクトするものはありますか?

PS: チェーンソーやジグソー、リリスを探しているわけではありません。アプリケーションでログメッセージを表示してほしい。

4

3 に答える 3

5

次のようなカスタム アペンダー クラスを作成する必要があります。

public class MyConsoleAppender extends AppenderBase<ILoggingEvent> {
  private Encoder<ILoggingEvent> encoder = new EchoEncoder<ILoggingEvent>();
  private ByteArrayOutputStream  out     = new ByteArrayOutputStream();

  public MyConsoleAppender() {
     LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
     setContext(lc);
     start();
     lc.getLogger("ROOT").addAppender(this);
  }

  @Override
  public void start() {
     try {
        encoder.init(out);
     } catch (IOException e) {}
     super.start();
  }

  @Override
  public void append(ILoggingEvent event) {
     try {
        encoder.doEncode(event);
        out.flush();
        String line = out.toString(); // TODO: append _line_ to your JTextPane
        out.reset();
     } catch (IOException e) {}
  }
}

EchoEncoder を PatternLayoutEncoder に置き換えることができます (logback の例のフォルダーにある CountingConsoleAppender の例を参照してください)。

エンコーダーは各イベントをバイト バッファーに書き込みます。次に、文字列を抽出して、これを JTextPane や JTextArea など、必要なものに書き込みます。

于 2011-10-07T03:43:34.267 に答える
4

この例JTextArea#append()で示唆されているように、私はしばしば に依存しています。ほとんどの Swing とは異なり、このメソッドはたまたまスレッドセーフです。

補遺:とを にConsoleリダイレクトする関連例です。System.outSystem.errJTextArea

于 2010-07-27T16:03:26.500 に答える