001: package logging;
002:
003: import org.apache.log4j.Level;
004: import org.apache.log4j.Logger;
005: import org.eclipse.core.runtime.ILog;
006: import org.eclipse.core.runtime.ILogListener;
007: import org.eclipse.core.runtime.IStatus;
008: import org.eclipse.core.runtime.Status;
009:
010: /**
011: * PluginLogListener
012: * This class is responsible for adding itself to the plug-in logging framework
013: * and translating plug-in log requests to Logger events.
014: * @author Manoel Marques
015: */
016: class PluginLogListener implements ILogListener {
017:
018: private ILog log;
019: private Logger logger;
020:
021: /**
022: * Creates a new PluginLogListener. Saves the plug-in log and logger instance.
023: * Adds itself to the plug-in log.
024: * @param plugin the plug-in object
025: * @param logger logger instance
026: */
027: PluginLogListener(ILog log, Logger logger) {
028: this .log = log;
029: this .logger = logger;
030: log.addLogListener(this );
031: }
032:
033: /**
034: * Removes itself from the plug-in log, reset instance variables.
035: */
036: void dispose() {
037: if (this .log != null) {
038: this .log.removeLogListener(this );
039: this .log = null;
040: this .logger = null;
041: }
042: }
043:
044: /**
045: * Log event happened.
046: * Translates status instance to Logger level and message.
047: * Status.ERROR - Level.ERROR
048: * Status.WARNING - Level.WARN
049: * Status.INFO - Level.INFO
050: * Status.CANCEL - Level.FATAL
051: * default - Level.DEBUG
052: * @param status Log Status
053: * @param plugin plug-in id
054: */
055: public void logging(IStatus status, String plugin) {
056: if (null == this .logger || null == status)
057: return;
058:
059: int severity = status.getSeverity();
060: Level level = Level.DEBUG;
061: if (severity == Status.ERROR)
062: level = Level.ERROR;
063: else if (severity == Status.WARNING)
064: level = Level.WARN;
065: else if (severity == Status.INFO)
066: level = Level.INFO;
067: else if (severity == Status.CANCEL)
068: level = Level.FATAL;
069:
070: plugin = formatText(plugin);
071: String statusPlugin = formatText(status.getPlugin());
072: String statusMessage = formatText(status.getMessage());
073: StringBuffer message = new StringBuffer();
074: if (plugin != null) {
075: message.append(plugin);
076: message.append(" - ");
077: }
078: if (statusPlugin != null
079: && (plugin == null || !statusPlugin.equals(plugin))) {
080: message.append(statusPlugin);
081: message.append(" - ");
082: }
083: message.append(status.getCode());
084: if (statusMessage != null) {
085: message.append(" - ");
086: message.append(statusMessage);
087: }
088: this .logger.log(level, message.toString(), status
089: .getException());
090: }
091:
092: static private String formatText(String text) {
093: if (text != null) {
094: text = text.trim();
095: if (text.length() == 0)
096: return null;
097: }
098: return text;
099: }
100: }
|