package janala.utils;
import janala.config.Config;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.*;
public class MyLogger {
private static ConsoleHandler handler = new ConsoleHandler();
private static String testDataDir = "testdata/";
static {
handler.setFormatter(new MyFormatter());
}
public static Logger getLogger(String name) {
Logger ret = Logger.getLogger(name);
ret.setUseParentHandlers(false);
ret.addHandler(handler);
ret.setLevel(Level.FINE);
try {
ret.setLevel(Config.instance.verbose ? Level.FINE : Level.WARNING);
} catch (Throwable notUsed) {
}
return ret;
}
public static Logger getFileLogger(String name) {
Logger ret = Logger.getLogger(name);
FileHandler handler = null;
try {
handler = new FileHandler(name, true);
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
handler.setFormatter(new MyFormatter());
ret.addHandler(handler);
return ret;
}
public static Logger getTestLogger(String name) {
if (!Config.instance.isTest) return getLogger(name);
try {
String filename = testDataDir + name;
Logger ret = Logger.getLogger(name);
ret.setUseParentHandlers(false);
if (ret.getHandlers().length == 0) {
if ((new File(filename).exists())) {
FileHandler handler = new FileHandler(filename + ".new");
handler.setFormatter(new MyFormatter());
ret.addHandler(handler);
} else {
FileHandler handler = new FileHandler(filename);
handler.setFormatter(new MyFormatter());
ret.addHandler(handler);
}
}
return ret;
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
return null;
}
public static void checkLog(Logger logger) {
if (!Config.instance.isTest) return;
Handler handlers[] = logger.getHandlers();
if (handlers.length != 0) {
if (handlers[0] instanceof FileHandler) {
((FileHandler) handlers[0]).close();
}
}
String filename = testDataDir + logger.getName();
File neW = new File(filename + ".new");
File old = new File(filename);
if (neW.exists() && old.exists()) {
if (!compareFiles(neW, old)) {
Logger test = getFileLogger(Config.instance.testLog);
test.warning("************* Test " + filename + " failed!! **************");
}
}
}
static private boolean compareFiles(File f1, File f2) {
try {
if (f1.length() != f2.length()) return false;
BufferedInputStream in1 = new BufferedInputStream(new FileInputStream(f1));
BufferedInputStream in2 = new BufferedInputStream(new FileInputStream(f2));
while (true) {
int a = in1.read();
int b = in2.read();
if (a != b) return false;
if (a == -1) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
class MyFormatter extends SimpleFormatter {
@Override
public String format(LogRecord logRecord) {
return logRecord.getLevel() + ": " + formatMessage(logRecord) + "\n";
}
}