package com.marginallyclever.makelangelo; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * static log methods available everywhere * @author danroyer * @since 7.3.0 */ public class Log { /** * logging * @see org.slf4j.Logger */ private static final Logger logger = LoggerFactory.getLogger(Makelangelo.class); private static ArrayList<LogListener> listeners = new ArrayList<LogListener>(); public static void addListener(LogListener listener) { listeners.add(listener); } public static void removeListener(LogListener listener) { listeners.remove(listener); } /** * wipe the log file * @author danroyer */ public static void clear() { Path p = FileSystems.getDefault().getPath("log.html"); try { Files.deleteIfExists(p); } catch (IOException e1) { e1.printStackTrace(); } // print starting time Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); write("<h3>" + sdf.format(cal.getTime()) + "</h3>\n"); } /** * Appends a message to the log file * @param msg */ public static void write(String msg) { try (Writer fileWriter = new FileWriter("log.html", true)) { PrintWriter logToFile = new PrintWriter(fileWriter); logToFile.write(msg); logToFile.flush(); } catch (IOException e) { logger.error("{}", e); } for( LogListener listener : listeners ) { listener.logEvent(msg); } } /** * turns milliseconds into h:m:s * @param millis * @return */ public static String millisecondsToHumanReadable(long millis) { long s = millis / 1000; long m = s / 60; long h = m / 60; m %= 60; s %= 60; String elapsed = ""; if (h > 0) elapsed += h + "h"; if (h > 0 || m > 0) elapsed += m + "m"; elapsed += s + "s "; return elapsed; } /** * Appends a message to the log file * @param color the hex code or HTML name of the color for this message * @param msg the text */ public static void write(String color, String msg) { write("<div color='"+color+"'>"+msg+"</div>\n"); } /** * Appends a message to the log file. Color will be red. * @param message */ public static void error(String message) { write("red",message); } /** * Appends a message to the log file. Color will be green. * @param message */ public static void message(String message) { write("green",message); } }