LogStream.java

package bjc.everge;

import java.io.*;

/**
 * Simple class used for logging with various levels.
 *
 * @author Ben Culkin
 */
public class LogStream {
	/**
	 * Log level for printing nothing.
	 */
	public static final int NOTHING = -1;

	/**
	 * Log level for printing only fatal errors.
	 */
	public static final int FATAL = 0;

	/**
	 * Log level for printing all errors.
	 */
	public static final int ERROR = 1;

	/**
	 * Log level for printing warnings.
	 */
	public static final int WARN = 2;

	/**
	 * Log level for printing info messages.
	 */
	public static final int INFO = 3;

	/**
	 * Log level for printing debug messages.
	 */
	public static final int DEBUG = 4;

	/**
	 * Log level for printing trace messages.
	 */
	public static final int TRACE = 5;

	private int verbosity;

	private PrintStream output;

	/**
	 * Create a new log stream.
	 *
	 * Defaults to printing only fatal errors.
	 *
	 * @param out
	 *            The output stream to place things into.
	 */
	public LogStream(PrintStream out) {
		output = out;
		verbosity = FATAL;
	}

	/**
	 * Create a new log stream.
	 *
	 * @param out
	 *              The output stream to place things into.
	 * @param level
	 *              The verbosity level. Use the constants in this class for the
	 *              values.
	 */
	public LogStream(PrintStream out, int level) {
		output = out;
		verbosity = level;
	}

	/**
	 * Get the verbosity of the stream.
	 * 
	 * @return The verbosity of the stream.
	 */
	public int verbosity() {
		return verbosity;
	}

	/**
	 * Set the verbosity of the stream.
	 * 
	 * @param verb
	 *             The verbosity of the stream.
	 */
	public void verbosity(int verb) {
		verbosity = verb;
	}

	/**
	 * Increment the verbosity of the stream.
	 */
	public void louder() {
		louder(1);
	}

	/**
	 * Increase the verbosity of the stream by an amount.
	 * 
	 * @param amt
	 *            The amount to increase the verbosity by.
	 */
	public void louder(int amt) {
		verbosity += amt;
	}

	/**
	 * Decrement the verbosity of the stream.
	 */
	public void quieter() {
		quieter(1);
	}

	/**
	 * Decrease the verbosity of the stream by an amount.
	 * 
	 * @param amt
	 *            The amount to decrease the verbosity by.
	 */
	public void quieter(int amt) {
		verbosity -= amt;
	}

	/**
	 * Print a message that will always be visible.
	 *
	 * @param msg
	 *            The message to print.
	 */
	public void print(String msg) {
		output.print(msg);
	}

	/**
	 * Print a formatted message that will always be visible.
	 *
	 * @param msg
	 *             The format string for the message to print.
	 *
	 * @param args
	 *             The arguments to the format string.
	 */
	public void printf(String msg, Object... args) {
		output.printf(msg, args);
	}

	/**
	 * Print a message at a given verbosity level.
	 * 
	 * @param lvl
	 *            The verbosity level.
	 * @param msg
	 *            The message to print.
	 */
	public void message(int lvl, String msg) {
		if (verbosity >= lvl) {
			output.print(msg);
		}
	}

	/**
	 * Print a formatted message at a given verbosity level.
	 * 
	 * @param lvl
	 *             The verbosity level.
	 * @param msg
	 *             The message to print.
	 * @param args
	 *             The arguments to the message.
	 */
	public void messagef(int lvl, String msg, Object... args) {
		if (verbosity >= lvl) {
			output.printf(msg, args);
		}
	}

	/**
	 * Emit a fatal error message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void fatal(String msg) {
		message(FATAL, msg);
	}

	/**
	 * Emit a formatted fatal error message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void fatalf(String msg, Object... args) {
		messagef(FATAL, msg, args);
	}

	/**
	 * Emit a normal error message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void error(String msg) {
		message(ERROR, msg);
	}

	/**
	 * Emit a formatted normal error message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void errorf(String msg, Object... args) {
		messagef(ERROR, msg, args);
	}

	/**
	 * Emit a warning message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void warn(String msg) {
		message(WARN, msg);
	}

	/**
	 * Emit a formatted warning message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void warnf(String msg, Object... args) {
		messagef(WARN, msg, args);
	}

	/**
	 * Emit an info message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void info(String msg) {
		message(INFO, msg);
	}

	/**
	 * Emit a formatted info message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void infof(String msg, Object... args) {
		messagef(INFO, msg, args);
	}

	/**
	 * Emit a debug message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void debug(String msg) {
		message(DEBUG, msg);
	}

	/**
	 * Emit a formatted debug message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void debugf(String msg, Object... args) {
		messagef(DEBUG, msg, args);
	}

	/**
	 * Emit a tracing message.
	 * 
	 * @param msg
	 *            The message to emit.
	 */
	public void trace(String msg) {
		message(TRACE, msg);
	}

	/**
	 * Emit a formatted tracing message.
	 * 
	 * @param msg
	 *             The message to emit.
	 * @param args
	 *             The arguments to the message.
	 */
	public void tracef(String msg, Object... args) {
		messagef(TRACE, msg, args);
	}
}