java - 小工具中的Logback+Swing

标签 java user-interface swing logging logback

我需要破解一个小工具。它应该读取几个文件并转换它们。现在可以在我的 IDE 中使用了。对于用户,我想添加一个简单显示日志输出的小 UI。

您知道用于 logback 的现成可用的 Swing appender 吗?或者将 System.out 重定向到一个只有一个文本字段和一个“关闭”按钮的小 UI?

PS:我不是在寻找 Chainsaw、Jigsaw 或 Lilith。我希望在应用程序中显示日志消息。

最佳答案

你需要像这样写一个自定义的appender类:

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,或您想要的任何内容。

关于java - 小工具中的Logback+Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3343612/

相关文章:

javascript - 如何在不触发 selectionchanged 事件的情况下将项目添加到 ExtJS GridPanel

java - 以前选择的 JTable 单元格在按键时触发编辑器,即使明确取消选择也是如此

java - 包装 JTextArea 没有获得足够的空间/窃取空间

java - 方法 show(FragmentManager, String) 不适用于 show(FragmentManager, String) android?

java - 在Java中创建一个没有数据的对象比使用静态方法要贵多少?

user-interface - Flutter ListView.builder - 如何以编程方式跳转到某个索引

java - 在 iOS7 中编码 UIImage 并在 Java 中解码(Base64)

java - 如何使用 "stop"作为关键字来停止 for 循环?

java - ElasticBeanstalk Java, Spring Activity 配置文件

java - 实现椭圆之间的折线连接