/* ========================================================================
* JCommon : a free general purpose class library for the Java(tm) platform
* ========================================================================
*
* (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
*
* Project Info: http://www.jfree.org/jcommon/index.html
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
* in the United States and other countries.]
*
* ---------------
* DefaultLog.java
* ---------------
* (C) Copyright 2004, by Object Refinery Limited.
*
* Original Author: Thomas Morgner;
* Contributor(s): David Gilbert (for Object Refinery Limited);
*
* $Id: DefaultLog.java,v 1.9 2006/02/19 21:10:48 taqua Exp $
*
* Changes
* -------
* 07-Jun-2004 : Added JCommon header (DG);
*
*/
package org.jfree.base.log;
import org.jfree.util.Log;
import org.jfree.util.LogTarget;
import org.jfree.util.PrintStreamLogTarget;
/**
* A default log implementation. The Log class defines how to create Logger-contexts
* and how to forward messages to the logtargets.
*
* @author Thomas Morgner
*/
public class DefaultLog extends Log {
/** The default log target. */
private static final PrintStreamLogTarget DEFAULT_LOG_TARGET =
new PrintStreamLogTarget();
/** The default log instance. */
private static final DefaultLog defaultLogInstance;
/**
* Creates a new log.
*/
protected DefaultLog () {
// nothing required
}
static {
defaultLogInstance = new DefaultLog();
defaultLogInstance.addTarget(DEFAULT_LOG_TARGET);
try {
// check the system property. This is the developers backdoor to activate
// debug output as soon as possible.
final String property = System.getProperty("org.jfree.DebugDefault", "false");
if (Boolean.valueOf(property).booleanValue()) {
defaultLogInstance.setDebuglevel(LogTarget.DEBUG);
}
else {
defaultLogInstance.setDebuglevel(LogTarget.WARN);
}
}
catch (SecurityException se) {
defaultLogInstance.setDebuglevel(LogTarget.WARN);
}
}
/**
* Initializes the log system after the log module was loaded and a log target
* was defined. This is the second step of the log initialisation.
*/
public void init() {
removeTarget(DEFAULT_LOG_TARGET);
final String logLevel = LogConfiguration.getLogLevel();
if (logLevel.equalsIgnoreCase("error")) {
setDebuglevel(LogTarget.ERROR);
}
else if (logLevel.equalsIgnoreCase("warn")) {
setDebuglevel(LogTarget.WARN);
}
else if (logLevel.equalsIgnoreCase("info")) {
setDebuglevel(LogTarget.INFO);
}
else if (logLevel.equalsIgnoreCase("debug")) {
setDebuglevel(LogTarget.DEBUG);
}
}
/**
* Adds a log target to this facility. Log targets get informed, via the
* LogTarget interface, whenever a message is logged with this class.
*
* @param target the target.
*/
public synchronized void addTarget(final LogTarget target)
{
super.addTarget(target);
// as soon as there is a real log target added, we do no longer need
// the default logging. This was only installed to be able to send messages
// if the deepest basic logging failed.
if (target != DEFAULT_LOG_TARGET) {
removeTarget(DEFAULT_LOG_TARGET);
}
}
/**
* Returns the default log.
*
* @return The default log.
*/
public static DefaultLog getDefaultLog() {
return defaultLogInstance;
}
/**
* Makes this implementation the default instance.
*/
public static void installDefaultLog () {
Log.defineLog(defaultLogInstance);
}
}