package org.newdawn.slick.util;
import java.security.AccessController;
import java.security.PrivilegedAction;
/**
* A simple central logging system
*
* @author kevin
*/
public final class Log {
/** True if we're doing verbose logging INFO and DEBUG */
private static boolean verbose = true;
/** true if activated by the system property "org.newdawn.slick.forceVerboseLog" */
private static boolean forcedVerbose = false;
/**
* The debug property which can be set via JNLP or startup parameter to switch
* logging mode to verbose for games that were released without verbose logging
* value must be "true"
*/
private static final String forceVerboseProperty = "org.newdawn.slick.forceVerboseLog";
/**
* the verbose property must be set to "true" to switch on verbose logging
*/
private static final String forceVerbosePropertyOnValue = "true";
/** The log system plugin in use */
private static LogSystem logSystem = new DefaultLogSystem();
/**
* The log is a simple static utility, no construction
*/
private Log() {
}
/**
* Set the log system that will have all of the log info
* sent to it.
*
* @param system The system to use for logging.
*/
public static void setLogSystem(LogSystem system) {
logSystem = system;
}
/**
* Indicate that we want verbose logging.
* The call is ignored if verbose logging is forced by the system property
* "org.newdawn.slick.forceVerboseLog"
*
* @param v True if we want verbose logging (INFO and DEBUG)
*/
public static void setVerbose(boolean v) {
if (forcedVerbose)
return;
verbose = v;
}
/**
* Check if the system property org.newdawn.slick.verboseLog is set to true.
* If this is the case we activate the verbose logging mode
*/
public static void checkVerboseLogSetting() {
try {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
String val = System.getProperty(Log.forceVerboseProperty);
if ((val != null) && (val.equalsIgnoreCase(Log.forceVerbosePropertyOnValue))) {
Log.setForcedVerboseOn();
}
return null;
}
});
} catch (Throwable e) {
// ignore, security failure - probably an applet
}
}
/**
* Indicate that we want verbose logging, even if switched off in game code.
* Only be called when system property "org.newdawn.slick.forceVerboseLog" is set to true.
* You must not call this method directly.
*/
public static void setForcedVerboseOn() {
forcedVerbose = true;
verbose = true;
}
/**
* Log an error
*
* @param message The message describing the error
* @param e The exception causing the error
*/
public static void error(String message, Throwable e) {
logSystem.error(message, e);
}
/**
* Log an error
*
* @param e The exception causing the error
*/
public static void error(Throwable e) {
logSystem.error(e);
}
/**
* Log an error
*
* @param message The message describing the error
*/
public static void error(String message) {
logSystem.error(message);
}
/**
* Log a warning
*
* @param message The message describing the warning
*/
public static void warn(String message) {
logSystem.warn(message);
}
/**
* Log a warning
*
* @param message The message describing the warning
* @param e The issue causing the warning
*/
public static void warn(String message, Throwable e) {
logSystem.warn(message, e);
}
/**
* Log an information message
*
* @param message The message describing the infomation
*/
public static void info(String message) {
if (verbose || forcedVerbose) {
logSystem.info(message);
}
}
/**
* Log a debug message
*
* @param message The message describing the debug
*/
public static void debug(String message) {
if (verbose || forcedVerbose) {
logSystem.debug(message);
}
}
}