package swap.log; import java.time.Instant; public abstract class Log { static final int LOW = 0; static final int HINT = 3; static final int DEFAULT = 4; static final int WARNING = 5; static final int ERROR = 7; static final int HIGH = 10; public static int saneLevel(int level) { if (level < LOW) { return LOW; } else if (level > HIGH) { return HIGH; } else { return level; } } public static String stringLevel(int level) { level = saneLevel(level); switch(level) { case LOW: return "LOW"; case HINT: return "HINT"; case DEFAULT: return "DEFAULT"; case WARNING: return "WARNING"; case ERROR: return "ERROR"; case HIGH: return "HIGH"; default: return "LEVEL " + level; } } public static String stringLine(Object[] line) { String r = ""; boolean first = true; for (Object o: line) { if (first) { first = false; } else { r += " "; } r += o; } return r; } public static String stringThread() { return Thread.currentThread().toString(); } public static String stringTime() { return Instant.now().toString(); } protected abstract void doWriteLine(int saneLevel, Object[] line); public synchronized final void writeLine(int level, Object...line) { doWriteLine(saneLevel(level), line); } public synchronized final void line(Object...line) { doWriteLine(DEFAULT, line); } }