/*
* LogService.java
*
* Yaoyong Li 22/03/2007
*
* $Id: LogService.java, v 1.0 2007-03-22 12:58:16 +0000 yaoyong $
*/
package gate.learning;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
/**
* Write the learning information into a log file, which name is specified in
* ConstantParameters.java. Also including a static variable debug determining
* the level of output of the ML Api.
*/
public class LogService {
//-------------------- Verbosity Level --------------------
/** The Minimum level, only output the error and warning information. */
public static final int MINIMUM = 0;
/** The normal level, outputing the setting information and results. */
public static final int NORMAL = 1;
/** Output the debug information. */
public static final int DEBUG = 2;
/**
* Determine if or not printing the information. 0 -- no debug information; 1 --
* usual information output; 2 -- all the information output, including some
* warning information.
*/
/** The minimal verbosity level. Message below this level are ignored. */
public static int minVerbosityLevel=1;
/** The PrintStream to write the messages to. */
private static PrintWriter logFileIn = null;
/** The last printed message. */
private static String lastMessage;
/** Counts how often a message was repeated. */
private static int equalMessageCount;
/** Open the log service and set the minimum verbosity level. */
public static void init(File logfile, boolean append, int verboLevel) throws IOException {
logFileIn = new PrintWriter(new FileWriter(logfile, append));
minVerbosityLevel = verboLevel;
}
/** Closes the log stream. */
public static void close() {
//logMessage("Ended logging", INIT);
logFileIn.close();
}
/** Writes the message to the output stream if the verbosity level is high enough. */
public static void logMessage(String message, int verbosityLevel) {
if (message == null) return;
if (verbosityLevel < minVerbosityLevel) return;
if (message.equals(lastMessage)) {
equalMessageCount++;
return;
}
if (equalMessageCount > 0) {
logFileIn.println("Last message repeated " + equalMessageCount + " times.");
equalMessageCount = 0;
}
lastMessage = message;
logFileIn.println(getTime() + " " + message);
logFileIn.flush();
}
//-------------------- private helper methods --------------------
/** Returns the current system time nicely formatted. */
private static String getTime() {
return java.text.DateFormat.getDateTimeInstance().format(new Date()) + ":";
}
}