Inceptum/src/main/java/io/gitlab/jfronny/inceptum/util/MapAppender.java

53 lines
2.1 KiB
Java

package io.gitlab.jfronny.inceptum.util;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Core;
import org.apache.logging.log4j.core.Filter;
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.util.StringBuilderFormattable;
import java.time.Instant;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@Plugin(name = "MapAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE)
public class MapAppender extends AbstractAppender {
public static final ConcurrentMap<String, LogEvent> EVENT_MAP = new ConcurrentHashMap<>();
public static final Set<String> LOG = new LinkedHashSet<>();
protected MapAppender(String name, Filter filter) {
//super(name, filter, null);
super(name, filter, null, false, null);
}
@PluginFactory
public static MapAppender createAppender(
@PluginAttribute("name") String name,
@PluginElement("Filter") Filter filter) {
return new MapAppender(name, filter);
}
@Override
public void append(LogEvent event) {
EVENT_MAP.put(Instant.now().toString(), event);
StringBuilder msg = new StringBuilder(event.getLevel().name())
.append(" | ")
.append(Instant.now().toString())
.append(" | [")
.append(event.getThreadName())
.append("] ")
.append(event.getSource().getClassName())
.append(" - ");
if (event.getMessage() instanceof StringBuilderFormattable sbf) sbf.formatTo(msg);
else msg.append(event.getMessage().getFormattedMessage());
LOG.add(msg.toString());
}
}