package org.lodder.subtools.multisubdownloader.gui.extra; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.AppenderBase; import ch.qos.logback.core.encoder.EchoEncoder; import ch.qos.logback.core.encoder.Encoder; public class LogTextAppender extends AppenderBase<ILoggingEvent> { private Encoder<ILoggingEvent> encoder = new EchoEncoder<>(); private ByteArrayOutputStream out = new ByteArrayOutputStream(); private JTextArea jTextArea; public LogTextAppender(JTextArea jTextArea) { this.jTextArea = jTextArea; LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setPattern("%msg%n"); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.start(); setContext(loggerContext); start(); loggerContext.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(); final String line = out.toString("UTF-8"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (jTextArea != null) { jTextArea.append(line); } } }); out.reset(); } catch (IOException e) { throw new RuntimeException(e); } } }