log4j日志显示到GUI组件——JTextArea(如果是其他GUI组件,需要略作修改)

自定义一个appender实现AppenderSkeleton这个抽象类即可。

废话不多说,直接上代码:(代码是自己写项目时的真实代码)

public class JTextAreaAppender extends AppenderSkeleton {

	/**
	 * 需要日志显示到的位置(这里是JTextArea对象)
	 */
	private JTextArea textArea = CqFrame.logArea;
	/**
	 * 最多显示条数
	 */
	protected int maxEntries = 100;
	/**
	 * 已经在JTextArea上显示的条数
	 */
	private int entries = 0;

	@Override
	public void close() {
		textArea.setText("");
		entries = 0;
	}

	@Override
	public boolean requiresLayout() {
		return true;
	}

	@Override
	protected void append(LoggingEvent event) {
		String text = this.layout.format(event);
		Document doc = null;
		try {
			doc = textArea.getDocument();
			if (entries >= maxEntries) {
				int endOfs = textArea.getLineEndOffset(entries - maxEntries);
				doc.remove(0, endOfs);
				entries = entries - 1;
			}
			entries = entries + 1;
			textArea.append(text);
			textArea.setCaretPosition(doc.getLength());
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
	}
}

log4j的配置文件中需要添加的:

log4j.rootLogger=debug, stdout, gui
......
#GUI 日志显示到页面上
log4j.appender.gui=com.usky.lvkecq.ui.JTextAreaAppender
log4j.appender.gui.layout=org.apache.log4j.PatternLayout
log4j.appender.gui.layout.ConversionPattern=%5p   [%t]   -  %m%n
log4j.appender.gui.Threshold=INFO

 希望对大家有帮助。转载请注明出处

猜你喜欢

转载自wuyibo126.iteye.com/blog/2240510