package org.apache.logging.log4j.core.async;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.ThreadContext.ContextStack;
import org.apache.logging.log4j.core.ContextDataInjector;
import org.apache.logging.log4j.core.impl.ContextDataInjectorFactory;
import org.apache.logging.log4j.core.util.Clock;
import org.apache.logging.log4j.core.util.NanoClock;
import org.apache.logging.log4j.util.StringMap;
import org.apache.logging.log4j.message.Message;
import com.lmax.disruptor.EventTranslator;
public class RingBufferLogEventTranslator implements
EventTranslator<RingBufferLogEvent> {
private final ContextDataInjector injector = ContextDataInjectorFactory.createInjector();
private AsyncLogger asyncLogger;
String loggerName;
protected Marker marker;
protected String fqcn;
protected Level level;
protected Message message;
protected Throwable thrown;
private ContextStack contextStack;
private long threadId = Thread.currentThread().getId();
private String threadName = Thread.currentThread().getName();
private int threadPriority = Thread.currentThread().getPriority();
private StackTraceElement location;
private Clock clock;
private NanoClock nanoClock;
@Override
public void translateTo(final RingBufferLogEvent event, final long sequence) {
event.setValues(asyncLogger, loggerName, marker, fqcn, level, message, thrown,
injector.injectContextData(null, (StringMap) event.getContextData()), contextStack,
threadId, threadName, threadPriority, location, clock, nanoClock);
clear();
}
private void clear() {
setBasicValues(null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
);
}
public void setBasicValues(final AsyncLogger anAsyncLogger, final String aLoggerName, final Marker aMarker,
final String theFqcn, final Level aLevel, final Message msg, final Throwable aThrowable,
final ContextStack aContextStack, final StackTraceElement aLocation,
final Clock aClock, final NanoClock aNanoClock) {
this.asyncLogger = anAsyncLogger;
this.loggerName = aLoggerName;
this.marker = aMarker;
this.fqcn = theFqcn;
this.level = aLevel;
this.message = msg;
this.thrown = aThrowable;
this.contextStack = aContextStack;
this.location = aLocation;
this.clock = aClock;
this.nanoClock = aNanoClock;
}
public void updateThreadValues() {
final Thread currentThread = Thread.currentThread();
this.threadId = currentThread.getId();
this.threadName = currentThread.getName();
this.threadPriority = currentThread.getPriority();
}
}