From 586b97e17bc3cb774adc8427a38f085ae98375ae Mon Sep 17 00:00:00 2001 From: Sen Date: Tue, 10 Jun 2025 14:48:39 +0200 Subject: [PATCH] improve logging --- proxy/src/main/java/proxy/util/Log.java | 65 +++++++++++++++++++------ 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/proxy/src/main/java/proxy/util/Log.java b/proxy/src/main/java/proxy/util/Log.java index 1505fbe..47563c7 100644 --- a/proxy/src/main/java/proxy/util/Log.java +++ b/proxy/src/main/java/proxy/util/Log.java @@ -1,53 +1,88 @@ package proxy.util; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import proxy.Proxy; + public class Log { - private static final boolean DEBUG = System.getProperty("log.debug") != null; + private static enum LogLevel { + ERROR("ERROR", 31), + WARN("WARN", 33), + INFO("INFO", 32), + DEBUG("DEBUG", 35); + + private final String name; + private final int color; + + private LogLevel(String name, int color) { + this.name = name; + this.color = color; + } + } - private static void log(String prefix, String msg) { - System.err.printf("[%s|%s] %s\n", prefix, Thread.currentThread().getName(), msg); + private static final boolean DEBUG = System.getProperty("log.debug") != null; + private static final boolean COLORS = !System.getProperty("os.name").toLowerCase(Locale.US).contains("win") && System.getProperty("log.nocolor") == null; + private static final DateFormat FORMAT = new SimpleDateFormat("HH:mm:ss"); + + private static void log(LogLevel level, String msg) { + System.err.printf(COLORS ? "\u001b[34m[%s]\u001b[m \u001b[" + level.color + "m[%s/%s]\u001b[m \u001b[36m(" + Proxy.NAME + ")\u001b[m \u001b[0m%s\n" : "[%s] [%s/%s] (" + Proxy.NAME + ") %s\n", + FORMAT.format(new Date()), Thread.currentThread().getName(), level.name, msg); } public static void error(String msg) { - log("error", msg); + log(LogLevel.ERROR, msg); } public static void error(String fmt, Object ... args) { - log("error", String.format(fmt, args)); + log(LogLevel.ERROR, String.format(fmt, args)); } public static void error(Throwable t, String msg) { - log("error", msg); - t.printStackTrace(System.err); + log(LogLevel.ERROR, msg); + StringWriter sw = new StringWriter(); + PrintWriter st = new PrintWriter(sw); + t.printStackTrace(st); + sw.flush(); + log(LogLevel.ERROR, sw.toString().trim().replace("\t", " ")); } public static void error(Throwable t, String fmt, Object ... args) { - log("error", String.format(fmt, args)); - t.printStackTrace(System.err); + log(LogLevel.ERROR, String.format(fmt, args)); + StringWriter sw = new StringWriter(); + PrintWriter st = new PrintWriter(sw); + t.printStackTrace(st); + sw.flush(); + log(LogLevel.ERROR, sw.toString().trim().replace("\t", " ")); } public static void warn(String msg) { - log("warn", msg); + log(LogLevel.WARN, msg); } public static void warn(String fmt, Object ... args) { - log("warn", String.format(fmt, args)); + log(LogLevel.WARN, String.format(fmt, args)); } public static void info(String msg) { - log("info", msg); + log(LogLevel.INFO, msg); } public static void info(String fmt, Object ... args) { - log("info", String.format(fmt, args)); + log(LogLevel.INFO, String.format(fmt, args)); } public static void debug(String msg) { if(DEBUG) - log("debug", msg); + log(LogLevel.DEBUG, msg); } public static void debug(String fmt, Object ... args) { if(DEBUG) - log("debug", String.format(fmt, args)); + log(LogLevel.DEBUG, String.format(fmt, args)); } }