package speedytools.common.utilities; import net.minecraftforge.fml.common.FMLLog; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * User: The Grey Ghost * Date: 1/03/14 * wrapper to interchangably replace static FMLLog calls with a logger for unit testing * usage: * ErrorLog.defaultLog().log(etc) instead of FMLLog.log(etc) * ErrorLog.defaultLog().severe (etc) * Defaults to FMLLog. To change this, call ErrorLog.setDefaultErrorLogger */ public class ErrorLog { public static ErrorLog defaultLog() { return defaultErrorLog; } public static void setDefaultErrorLogger(Logger i_logger) { defaultErrorLog = new ErrorLog(i_logger); } /** sends all messages to the given logfile, does not copy to console * * @param logfilename */ public static void setLogFileAsDefault(String logfilename) { Logger logger = LogManager.getLogger("Default"); // logger.setLevel(Level.INFO); // FileHandler fileTxt; // try { // fileTxt = new FileHandler(logfilename); // } catch (IOException e) { // setDefaultErrorLogger(logger); // return; // } // fileTxt.setFormatter(new SimpleFormatter()); // for (Handler handler : logger.getHandlers()) { // logger.removeHandler(handler); // } // logger.addHandler(fileTxt); // logger.setUseParentHandlers(false); setDefaultErrorLogger(logger); } private static ErrorLog defaultErrorLog = new ErrorLog(null); public ErrorLog(Logger i_logger) { if (i_logger == null) { useFMLLog = true; } else { useFMLLog = false; logger = i_logger; } } private boolean useFMLLog; private Logger logger; public void log(String logChannel, Level level, String format, Object... data) { if (useFMLLog) { FMLLog.log(logChannel, level, format, data); } else { logger.log(level, String.format(format, data)); } } public void log(Level level, String format, Object... data) { if (useFMLLog) { FMLLog.log(level, format, data); } else { logger.log(level, String.format(format, data)); } } public void log(String logChannel, Level level, Throwable ex, String format, Object... data) { if (useFMLLog) { FMLLog.log(logChannel, level, ex, format, data); } else { logger.log(level, String.format(format, data), ex); } } public void log(Level level, Throwable ex, String format, Object... data) { if (useFMLLog) { FMLLog.log(level, ex, format, data); } else { logger.log(level, String.format(format, data), ex); } } public void severe(String format, Object... data) { log(Level.FATAL, format, data); } public void debug(String format, Object... data) { log(Level.DEBUG, format, data); } public void info(String format, Object... data) { log(Level.INFO, format, data); } }