package org.fanhongtao.log; import java.io.StringWriter; import org.apache.log4j.WriterAppender; import org.apache.log4j.spi.LoggingEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; /** * The appender to write log message into a SWT Text controller.<br> * This appender can not used in the Log4j properties because I can't find * a easy way to specify the which Text controller is used. So I used this * appender only in the Java Code. * @author Dharma * @created 2008-10-29 */ public class SwtTextAppender extends WriterAppender { /** The Text controller to write log text */ private Text text = null; private StringWriter sw; public SwtTextAppender(Text text) { this.text = text; sw = new StringWriter(1024); setWriter(sw); } @Override public void append(LoggingEvent event) { sw.getBuffer().setLength(0); super.append(event); // write log message into Text controller final String message = sw.toString(); Display.getDefault().syncExec(new Runnable() { @Override public void run() { text.append(message); } }); } }