package org.jabref.gui.logging;
import java.io.Serializable;
import org.jabref.gui.util.DefaultTaskExecutor;
import org.jabref.logic.logging.LogMessages;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.layout.PatternLayout;
@Plugin(name = "GuiAppender", category = "Core", elementType = "appender", printObject = true)
@SuppressWarnings("unused") // class is indirectly constructed by log4j
public class GuiAppender extends AbstractAppender {
private GuiAppender(String name, Filter filter, Layout<? extends Serializable> layout) {
super(name, filter, layout);
}
@PluginFactory
public static GuiAppender createAppender(@PluginAttribute("name") String name,
@PluginElement("Layout") Layout<?> layout,
@PluginElement("Filters") Filter filter) {
if (name == null) {
LOGGER.error("No name provided for GuiAppender");
return null;
}
if (layout == null) {
layout = PatternLayout.createDefaultLayout();
}
return new GuiAppender(name, filter, layout);
}
/**
* The log event will be forwarded to the {@link LogMessages} archive.
*/
@Override
public void append(LogEvent event) {
DefaultTaskExecutor.runInJavaFXThread(() -> LogMessages.getInstance().add(event));
}
}