package de.stealmycode.beehive.utils;
import de.stealmycode.beehive.Beehive;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Projectwide logger.
*
* @author Florian Bogenhard
*/
public class Log {
private final static Logger LOGGER = Logger.getLogger("");
/**
* Initialization befor loading config
*/
public static void preInit(){
LOGGER.setLevel(Level.INFO);
try {
// Handler for LOGGER_GLOBAL
Handler handler = new FileHandler(Constants.PATH_LOGFILE);
LOGGER.addHandler(handler);
handler.setLevel(LOGGER.getLevel());
} catch (SecurityException e) {
error("SecurityException in Log.preInit() ", e);
System.exit(1);
} catch (IOException e) {
error( "IOException in Log.preInit() ", e);
System.exit(1);
}
}
private static void setLogLevel(Level lvl){
LOGGER.finer("Change Log-Level to "+lvl.getName());
LOGGER.setLevel(lvl);
for(Handler handler : LOGGER.getHandlers()){
handler.setLevel(lvl);
}
}
/**
* Initialization after loading config
*/
public static void init(){
Log.debug("Logger: Switch to Config Settings");
Level globalLogLevel = Beehive.config.getGlobalLogLevel();
LOGGER.setLevel(globalLogLevel);
for(Handler handler : LOGGER.getHandlers()){
handler.setLevel(globalLogLevel);
}
Log.debug("Logger: Switch done");
}
/**
* Private constructor. This is a static class only.
*/
private Log() {}
private static StackTraceElement caller(){
// 1 Debug
// 2 log
// 3 caller()
// 4
return Thread.currentThread().getStackTrace()[4];
}
/**
* Send the message to the logger.
*
* @param logger
* @param level
* @param msgLvl
*/
private static void log(Level level, String msg){
StackTraceElement caller = caller();
Logger.getLogger(caller.getClassName()).logp(level, caller.getClassName(), caller.getMethodName(), msg);
}
private static void log(Level level, String msg,Throwable t){
StackTraceElement caller = caller();
Logger.getLogger(caller.getClassName()).logp(level, caller.getClassName(), caller.getMethodName(), msg, t);
}
/**
* Debug Log
*
* @param msg message
*/
public static void debug(String msg){
log(Lvl.DEBUG,msg);
}
/**
* Debug Log
*
* @param msg message
* @param exception exception
*/
public static void debug(String msg, Throwable t){
log(Lvl.DEBUG,msg ,t);
}
/**
* Info Log
*
* @param msg message
*/
public static void info(String msg){
log(Level.INFO,msg);
}
/**
* Info Log
*
* @param msg message
* @param exception exception
*/
public static void info(String msg, Throwable exception){
log(Level.INFO,msg,exception);
}
/**
* Warning Log
*
* @param msg message
*/
public static void warning(String msg){
log(Level.WARNING,msg);
}
/**
* Warning Log
*
* @param msg message
* @param exception exception
*/
public static void warning(String msg, Throwable exception){
log(Level.WARNING,msg,exception);
}
/**
* Error Log
*
* @param msg message
*/
public static void error(String msg){
log(Level.SEVERE,msg);
}
/**
* Error Log
*
* @param msg message
* @param exception exception
*/
public static void error(String msg, Throwable exception){
log(Level.SEVERE,msg,exception);
}
}