package net.gnehzr.tnoodle.utils;
import java.io.File;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TNoodleLogging {
private static final Logger l = Logger.getLogger(TNoodleLogging.class.getName());
private static final int MAX_BYTES = 1024*1024*5;
private static final int FILE_COUNT = 5;
private static final Level DEFAULT_LOG_LEVEL = Level.INFO;
private static ConsoleHandler ch;
private static FileHandler fh;
private static Logger rootLogger;
private static Formatter formatter;
public static void initializeLogging() {
rootLogger = Logger.getLogger("");
rootLogger.setLevel(Level.FINEST);
for(Handler h : rootLogger.getHandlers()) {
rootLogger.removeHandler(h);
}
// By default, we print logs of level Level.INFO or higher
// or more important to the screen.
formatter = new OneLineLogFormatter();
ch = new ConsoleHandler();
setConsoleLogLevel(DEFAULT_LOG_LEVEL);
ch.setFormatter(formatter);
rootLogger.addHandler(ch);
String fileLogLevel = System.getenv("TNOODLE_FILE_LOG_LEVEL");
if(fileLogLevel != null) {
Level fl = Level.parse(fileLogLevel);
setFileLogLevel(fl);
}
String consoleLogLevel = System.getenv("TNOODLE_CONSOLE_LOG_LEVEL");
if(consoleLogLevel != null) {
Level cl = Level.parse(consoleLogLevel);
setConsoleLogLevel(cl);
}
}
public static File getLogFile() {
return new File(Utils.getResourceDirectory(), "log/tnoodle.log");
}
public static Level[] getLevels() {
return new Level[] {
Level.ALL,
Level.FINEST,
Level.FINER,
Level.FINE,
Level.CONFIG,
Level.INFO,
Level.WARNING,
Level.SEVERE,
Level.OFF
};
}
public static void setConsoleLogLevel(Level level) {
ch.setLevel(level);
l.config("Console log level " + level);
}
public static void setFileLogLevel(Level level) {
if(fh == null) {
try {
File logFile = getLogFile();
logFile.getParentFile().mkdirs();
fh = new FileHandler(logFile.getAbsolutePath(), MAX_BYTES, FILE_COUNT, true);
setFileLogLevel(DEFAULT_LOG_LEVEL);
fh.setFormatter(formatter);
rootLogger.addHandler(fh);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
fh.setLevel(level);
l.config(getLogFile() + " log level " + level);
}
}