Here’s a simple way to consume log4j messages in pivot for use in a log console or similar.
First create a custom appender which sents a log message to the pivot message bus.
public class MessageBusAppender extends AppenderSkeleton { @Override protected void append(LoggingEvent event) { MessageBus.sendMessage(new LogMessage(layout, event)); } @Override public boolean requiresLayout() { return true; } @Override public void close() { //nop } } public class LogMessage { private Layout logLayout; private LoggingEvent event; public LoggingEvent getEvent() { return event; } public Layout getLogLayout() { return logLayout; } public LogMessage(Layout logLayout, LoggingEvent event) { this.logLayout = logLayout; this.event = event; } }
In any component needs to display log messages, just listen for the messages and update as appropriately. Here’s an example updating a textpane:
public class LogPane extends Border { @BXML private TextPane logTxt; @BXML private PushButton clearBtn; ... ... logTxt.setDocument(new Document()); MessageBus.subscribe(LogMessage.class, new MessageBusListener() { public void messageSent(final LogMessage message) { ApplicationContext.queueCallback(new Runnable() { @Override public void run() { String text = message.getLogLayout().format(message.getEvent()); logTxt.getDocument().add(new Paragraph(text)); if (message.getEvent().getThrowableInformation() != null) { StringBuilder sb = new StringBuilder(); for (String s : message.getEvent().getThrowableInformation().getThrowableStrRep()) { sb.append(" "); sb.append(s); sb.append("\n"); } logTxt.getDocument().add(new Paragraph(sb.toString())); } } }); } }); clearBtn.getButtonPressListeners().add(new ButtonPressListener() { public void buttonPressed(Button button) { logTxt.setDocument(new Document()); } }); ... ... }
Now tie it together in your log4j config:
log4j.rootLogger=ERROR, Pivot log4j.appender.Pivot=sample.MessageBusAppender log4j.appender.Pivot.layout=org.apache.log4j.PatternLayout log4j.appender.Pivot.layout.ConversionPattern=%-6r [%15.15t] %-5p %30.30c %x - %m%n