package jaci.openrio.toast.lib.log; import jaci.openrio.toast.core.ToastBootstrap; import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; /** * A utility class to attach system.out and system.err into {@link jaci.openrio.toast.lib.log.SplitStream} to * a file and to the standard streams * * @author Jaci */ public class SysLogProxy { static PrintStream sysOut; static PrintStream sysErr; public static FileOutputStream fileOut; public static FileOutputStream fileErr; public static PrintStream outStream; public static PrintStream errStream; public static File logDir; public static File recentOut; public static File oldOut; public static File recentErr; public static SplitStream master; public static SplitStream masterError; static boolean init = false; /** * Initialize the proxy if it has not already been started. This splits the System.out and System.err streams * to Files in the filesystem. */ public static void init() { try { if (!init) { init = true; logDir = new File(ToastBootstrap.toastHome, "log"); logDir.mkdirs(); recentOut = new File(logDir, "recent.txt"); recentErr = new File(logDir, "recentErr.txt"); if (recentOut.exists()) { oldOut = new File(logDir, "last_session.txt"); if (oldOut.exists()) oldOut.delete(); recentOut.renameTo(oldOut); recentOut = new File(logDir, "recent.txt"); recentOut.delete(); } if (recentErr.exists()) recentErr.delete(); fileOut = new FileOutputStream(recentOut); fileErr = new FileOutputStream(recentErr); sysOut = System.out; sysErr = System.err; master = new SplitStream(sysOut, fileOut); outStream = new ColorPrint(master); masterError = new SplitStream(sysErr, fileOut, fileErr); errStream = new ColorPrint(masterError); System.setOut(outStream); System.setErr(errStream); } } catch (Exception e) { System.err.println("System Log Proxy failed..."); e.printStackTrace(); } } }