blob: 5129ca5cb77c797e4cbca1a0821846abaa687798 [file] [log] [blame]
package org.eclipse.jem.internal.core;
/*******************************************************************************
* Copyright (c) 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* $RCSfile: MsgLogger.java,v $
* $Revision: 1.1 $ $Date: 2003/10/27 17:12:30 $
*/
/**
* MsgLogger abstract class. There will be subclasses to implement according to inside Eclipse or not.
*
* NOTE: Very important, this class must not access anything in the workbench. Therefor no imports to workbench
* things can be here.
*
* When running outside of Eclipse, the echo to console and logging level come from the system properties
* "logEchoConsole" (="true") and "logLevel" (="n" where "n" is an integer). The defaults are "false" and "5" for LOG_WARNING.
*
* @version 1.0
* @author
*/
public abstract class MsgLogger {
public static final int LOG_DEFAULT = -1;
public static final int LOG_NONE = 7;
public static final int LOG_SEVERE = 6;
public static final int LOG_WARNING = 5;
public static final int LOG_INFO = 4;
public static final int LOG_CONFIG = 3;
public static final int LOG_FINE = 2;
public static final int LOG_FINER = 1;
public static final int LOG_FINEST = 0;
public static final int MIN_LOG = LOG_FINEST;
private static MsgLogger DEFAULT_LOGGER; // This is the default logger used either when not running in a plugin environment, or if no plugin given (for those that need to run in both).
private boolean logEchoConsole = false;
/**
* Used by those classes that need to run either inside or outside of Eclipse. When inside Eclipse it will use the
* appropriate Eclipse logger (e.g. EclipseLogMsgLogger for .log file, or if Hyades is available (and logger is available) use that one.
*
* @return The default logger.
*/
public static MsgLogger getLogger() {
if (DEFAULT_LOGGER == null) {
// Use the console logger. If Eclipse was present, there would of been a logger here, installed by JEMPlugin.startUp().
// With the consoleLogger, echo console and default level comes from a system property being defined in command line.
boolean echo = System.getProperty("logEchoConsole", "false").equalsIgnoreCase("true");
int logLevel = Integer.getInteger("logLevel", LOG_WARNING).intValue();
if (logLevel < MIN_LOG && logLevel > LOG_NONE)
logLevel = LOG_WARNING; // Outside of available level.
DEFAULT_LOGGER = new ConsoleLogger(echo, logLevel);
}
return DEFAULT_LOGGER;
}
/*
* <package-protected> so that only JEMPlugin can do this. Default logger will be calculated otherwise.
*/
static void setDefaultLogger(MsgLogger logger) {
DEFAULT_LOGGER = logger;
}
protected MsgLogger(boolean logEchoConsole) {
this.logEchoConsole = logEchoConsole;
}
public final void log(Throwable e) {
log(e, LOG_DEFAULT);
}
public final void log(Throwable e, int logLevel) {
primLog(e, logLevel);
if (logEchoConsole)
echoConsole(e);
}
protected void echoConsole(Throwable e) {
e.printStackTrace();
}
public final void log(Object object) {
log(object, LOG_DEFAULT);
}
public final void log(Object object, int logLevel) {
primLog(object, logLevel);
if (logEchoConsole)
echoConsole(object);
}
protected void echoConsole(Object object) {
System.out.println(object.toString());
}
// The following are added to match up with Hyades so that primitives can be logged too.
public final void log(boolean msg) {
log(msg, LOG_DEFAULT);
}
public final void log(boolean msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(char msg) {
log(msg, LOG_DEFAULT);
}
public final void log(char msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(byte msg) {
log(msg, LOG_DEFAULT);
}
public final void log(byte msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void write(short msg) {
log(msg, LOG_DEFAULT);
}
public final void log(short msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(int msg) {
log(msg, LOG_DEFAULT);
}
public final void log(int msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(long msg) {
log(msg, LOG_DEFAULT);
}
public final void log(long msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(float msg) {
log(msg, LOG_DEFAULT);
}
public final void log(float msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
public final void log(double msg) {
log(msg, LOG_DEFAULT);
}
public final void log(double msg, int logLevel) {
primLog(msg, logLevel);
if (logEchoConsole)
echoConsole(String.valueOf(msg));
}
protected abstract void primLog(Object object, int logLevel);
protected abstract void primLog(Throwable exc, int logLevel);
protected abstract void primLog(boolean msg, int logLevel);
protected abstract void primLog(byte msg, int logLevel);
protected abstract void primLog(char msg, int logLevel);
protected abstract void primLog(double msg, int logLevel);
protected abstract void primLog(float msg, int logLevel);
protected abstract void primLog(int msg, int logLevel);
protected abstract void primLog(long msg, int logLevel);
protected abstract void primLog(short msg, int logLevel);
public void setLogEchoConsole(boolean logEchoConsole) {
this.logEchoConsole = logEchoConsole;
}
public boolean isLogEchoConsole() {
return logEchoConsole;
}
}