package hueimmersive; import java.io.File; import java.net.URLDecoder; import java.util.ArrayList; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; public class Debug { private static boolean debugging = false; private static boolean logging = false; private static Logger logger; private static FileHandler handler; public static void activateDebugging() { debugging = true; } public static void activateLogging() { logging = true; try // to create a log file { String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(); String decodedPath = URLDecoder.decode(path, "UTF-8"); String logpath = new File(decodedPath).getParentFile().getPath(); logpath = logpath.replace("\\", "/"); logger = Logger.getLogger("global"); handler = new FileHandler(logpath + "/HueImmersive.log"); logger.addHandler(handler); logger.setUseParentHandlers(false); SimpleFormatter formatter = new SimpleFormatter(); handler.setFormatter(formatter); } catch (Exception e) { Debug.exception(e); } } public static void closeLog() // close and unlock log { if (logging == true) { info(null, "log closed"); logger.setUseParentHandlers(false); handler.close(); } } public static void info(String header, Object ... msg) // log/debug a information message { ArrayList<Object> list = new ArrayList<Object>(); for (Object object : msg) { if (object.getClass() == ArrayList.class) { ArrayList<Object> subList = (ArrayList<Object>) object; for (Object subObject : subList) { list.add(subObject); } } else { list.add(object); } } msg = list.toArray(); // format message for debug output if (debugging == true) { String dText = "\n"; if (header != null && header != "") { dText += "- - - - - " + header.toUpperCase() + " - - - - -\n"; if (msg.length == 0) { dText += "\n"; } } for (int i = 0; i < msg.length; i++) { if (i != msg.length - 1) { dText += msg[i] + "\n"; } else { dText += msg[i]; if (header != null && header != "") { dText += "\n- - - - -"; } } } System.out.println(dText); } // format message for log if (logging == true) { String lText = ""; if (header != null && header != "") { lText += header.toUpperCase(); if (msg.length == 0) { lText += "\n"; } } for (int i = 0; i < msg.length; i++) { if (i != msg.length - 1) { lText += "\n > " + msg[i]; } else { lText += "\n > " + msg[i] + "\n"; } } logger.log(Level.INFO, lText); } } public static void exception(Exception e) // log/debug exception { // format message for debug output if (debugging == true) { System.out.println(); e.printStackTrace(); } // format message for log if (logging == true) { logger.log(Level.SEVERE, "", e); } } }