package mountainrangepvp.engine;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.*;
/**
* A log with a name.
*/
public class Log {
private final Logger log;
private String name;
public Log(String name) {
this.name = name;
log = Logger.getLogger("mountainrangepvp." + name + "-" + Math.random());
log.setLevel(Level.FINE);
log.setUseParentHandlers(false);
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.FINE);
handler.setFormatter(new LogFormatter());
log.addHandler(handler);
}
public void setName(String name) {
this.name = name;
}
public void info(String message) {
log.info(message);
}
public void fine(String message) {
log.fine(message);
}
public void warn(String message) {
log.warning(message);
}
public void warn(String message, Throwable e) {
log.log(Level.WARNING, message, e);
}
public void crash(String message) {
log.log(Level.SEVERE, message);
}
public void crash(String message, Throwable e) {
log.log(Level.SEVERE, message, e);
}
public void todo() {
String caller = getCaller();
warn("TODO:" + caller);
}
public void todo(String msg) {
String caller = getCaller();
warn("TODO:" + caller + ": " + msg);
}
private static String getCaller() {
StackTraceElement e = Thread.currentThread().getStackTrace()[3];
return e.toString();
}
private final class LogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
StringBuilder sb = new StringBuilder();
sb.append(record.getLevel().getName())
.append(" ")
.append(name)
.append(": ")
.append(formatMessage(record))
.append('\n');
if (record.getThrown() != null) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
pw.close();
sb.append(sw.toString());
} catch (Exception ex) {
// ignore
}
}
return sb.toString();
}
}
}