package dein.package;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
public class EclipseLoggingServiceAppender extends AppenderSkeleton {
// TODO replace hardcoded plugin id
private static final String PLUGIN_ID = "deine.plugin.id";
private ILog loggingService;
@Override
public void activateOptions() {
this.loggingService = Platform.getLog(Platform.getBundle(PLUGIN_ID));
}
@Override
protected void append(LoggingEvent event) {
IStatus status = null;
if (hasTrowable(event)) {
Throwable throwable = event.getThrowableInformation().getThrowable();
status = new Status(getSeverity(event), PLUGIN_ID, event.getMessage().toString(),
throwable);
} else {
if (hasMessage(event)) {
status = new Status(getSeverity(event), PLUGIN_ID, event.getMessage().toString());
} else {
status = new Status(getSeverity(event), PLUGIN_ID, "");
}
}
loggingService.log(status);
}
private boolean hasMessage(LoggingEvent event) {
return null != event.getMessage();
}
private boolean hasTrowable(LoggingEvent event) {
return null != event.getThrowableInformation();
}
private int getSeverity(LoggingEvent event) {
Level level = event.getLevel();
if (level == Level.FATAL || level == Level.ERROR)
return IStatus.ERROR;
else if (level == Level.WARN)
return IStatus.WARNING;
else if (level == Level.INFO)
return IStatus.INFO;
else
// debug, trace and custom levels
return IStatus.OK;
}
@Override
public void close() {
}
/**
* Return always false, we have our own layout.
*/
@Override
public boolean requiresLayout() {
return false;
}
}