blob: 1262caf60132362e958614d268f1adafe99fe43b [file] [log] [blame]
package org.eclipse.scout.sdk.util.log;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.scout.commons.StringUtility;
import org.osgi.framework.BundleContext;
public class SdkLogManager {
private static final String LOG_LEVEL_SUFFIX = ".loglevel";
private final int m_logLevel;
private final Plugin m_plugin;
public SdkLogManager(Plugin p) {
this(p, getLogLevelProperty(p));
}
public SdkLogManager(Plugin p, String logLevel) {
this(p, parseLogLevel(logLevel));
}
public SdkLogManager(Plugin p, int logLevel) {
m_plugin = p;
m_logLevel = logLevel;
}
protected IStatus createStatus(IStatus log) {
if (log instanceof LogStatus) {
return log;
}
else {
return createStatus(log.getSeverity(), log.getMessage(), log.getException());
}
}
protected IStatus createStatus(int severity, String message, Throwable t) {
String msg = message;
if (msg == null) {
msg = "";
}
return new LogStatus(getPlugin().getClass(), severity, getPlugin().getBundle().getSymbolicName(), msg, t);
}
private void logImpl(IStatus log) {
if ((log.getSeverity() & getLogLevel()) != 0) {
getPlugin().getLog().log(log);
}
}
public void log(IStatus log) {
logImpl(createStatus(log));
}
public void logInfo(Throwable t) {
logInfo(null, t);
}
public void logInfo(String message) {
logInfo(message, null);
}
public void logInfo(String message, Throwable t) {
logImpl(createStatus(IStatus.INFO, message, t));
}
public void logWarning(String message) {
logWarning(message, null);
}
public void logWarning(Throwable t) {
logWarning(null, t);
}
public void logWarning(String message, Throwable t) {
logImpl(createStatus(IStatus.WARNING, message, t));
}
public void logError(Throwable t) {
logError("", t);
}
public void logError(String message) {
logError(message, null);
}
public void logError(String message, Throwable t) {
logImpl(createStatus(IStatus.ERROR, message, t));
}
/**
* @see SdkLogManager#log(int, String, Throwable)
*/
public void log(int logLevel, Throwable t) {
log(logLevel, "", t);
}
/**
* @see SdkLogManager#log(int, String, Throwable)
*/
public void log(int logLevel, String message) {
log(logLevel, message, null);
}
/**
* @param logLevel
* one of {@link IStatus#INFO}, {@link IStatus#WARNING} or {@link IStatus#ERROR}
* @param message
* @param t
*/
public void log(int logLevel, String message, Throwable t) {
logImpl(createStatus(logLevel, message, t));
}
private static String getLogLevelProperty(Plugin p) {
if (p != null && p.getBundle() != null) {
return getLogLevelProperty(p.getBundle().getBundleContext());
}
return null;
}
private static String getLogLevelProperty(BundleContext context) {
if (context == null) return null;
else return context.getProperty(context.getBundle().getSymbolicName() + LOG_LEVEL_SUFFIX);
}
private static int parseLogLevel(String loglevel) {
int level = IStatus.INFO | IStatus.WARNING | IStatus.ERROR | IStatus.CANCEL;
if (!StringUtility.isNullOrEmpty(loglevel)) {
String lowerLoglevel = loglevel.toLowerCase();
if (lowerLoglevel.equals("warning")) {
level = IStatus.WARNING | IStatus.ERROR | IStatus.CANCEL;
}
else if (lowerLoglevel.equals("error")) {
level = IStatus.ERROR | IStatus.CANCEL;
}
else if (lowerLoglevel.equals("cancel")) {
level = IStatus.CANCEL;
}
}
return level;
}
protected int getLogLevel() {
return m_logLevel;
}
protected Plugin getPlugin() {
return m_plugin;
}
}