package de.elena.zss.gui.utils;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.ThrowableInformation;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.Status;
import de.elena.zss.gui.Activator;
import de.elena.zss.gui.Application;
public class PluginLogAppender extends AppenderSkeleton {
protected ILog logView;
protected String symbolicName;
protected String logLevel = "ERROR";
@Override
protected void append(LoggingEvent arg0) {
if(logView == null){
logView = Activator.getDefault().getLog();
symbolicName = Activator.getDefault().getBundle().getSymbolicName();
}
if (this.layout == null) {
this.errorHandler.error("Missing layout for appender " +
this.name,null,ErrorCode.MISSING_LAYOUT);
return;
}
StringBuffer text = new StringBuffer();
if(Application.getUserFactory() != null){
if(Application.getUserFactory().getBenutzer() != null)
text.append(Application.getUserFactory().getBenutzer().getUserId());
text.append(":");
}
text.append(this.layout.format(arg0));
Throwable thrown = null;
if (this.layout.ignoresThrowable()) {
ThrowableInformation info = arg0.getThrowableInformation();
if (info != null)
thrown = info.getThrowable();
}
Level _level = arg0.getLevel();
if(_level.toInt() >= Level.toLevel(logLevel).toInt()){
int severity = Status.OK;
if (_level.toInt() >= Level.ERROR_INT)
severity = Status.ERROR;
else if (_level.toInt() >= Level.WARN_INT)
severity = Status.WARNING;
else if (_level.toInt() >= Level.INFO_INT)
severity = Status.INFO;
logView.log(new Status(severity, symbolicName, text.toString(), thrown));
}
}
public void close() {
logView = null;
symbolicName = null;
}
public boolean requiresLayout() {
return true;
}
public String getLogLevel() {
return logLevel;
}
public void setLogLevel(String logLevel) {
this.logLevel = logLevel;
}
}