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