Hi,
also ich logge alles über die LogView. Jedoch mache ich alles mit Log4J, da die Utils die ich für mein Projekt benötige intern selber auch mit Log4j loggen. Deshalb habe ich mir eine Klasse gebastelt die Log4J macht, aber dann als Ausgabe das Log von Eclipse verwendet.
Hier mal mein eigener Code, die funktioniert ganz gut:
[CODE]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;
}
}[/CODE]
Dieser Appender ist auch so konzipiert das er unabhängig von anderen Appender sein eigenes Level hat.