refactor AnsiLog

pull/539/head^2
hengyunabc 6 years ago
parent 0ae53869be
commit 8d32e691c9

@ -18,6 +18,8 @@ import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.taobao.arthas.common.IOUtils;
/**
*
* @author hengyunabc 2018-11-06

@ -17,6 +17,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.taobao.arthas.common.ExecutingCommand;
import com.taobao.arthas.common.IOUtils;
/**
*

@ -1,65 +1,265 @@
package com.taobao.arthas.common;
import java.util.logging.Level;
import java.util.regex.Matcher;
/**
*
* <pre>
* FINEST -> TRACE
* FINER -> DEBUG
* FINE -> DEBUG
* CONFIG -> INFO
* INFO -> INFO
* WARNING -> WARN
* SEVERE -> ERROR
* </pre>
*
* @see org.slf4j.bridge.SLF4JBridgeHandler
* @author hengyunabc 2017-05-03
*
*/
public abstract class AnsiLog {
static boolean enable = System.console() != null;
static boolean enableColor;
public static java.util.logging.Level LEVEL = java.util.logging.Level.INFO;
private static final String RESET = "\033[0m";
private static final int DEFAULT = 39;
private static final int BLACK = 30;
private static final int RED = 31;
private static final int GREEN = 32;
private static final int YELLOW = 33;
private static final int BLUE = 34;
private static final int MAGENTA = 35;
private static final int CYAN = 36;
private static final int WHITE = 37;
private static final String TRACE_PREFIX = "[TRACE] ";
private static final String TRACE_COLOR_PREFIX = "[" + colorStr("TRACE", GREEN) + "] ";
private static final String DEBUG_PREFIX = "[DEBUG] ";
private static final String DEBUG_COLOR_PREFIX = "[" + colorStr("DEBUG", GREEN) + "] ";
private static final String INFO_PREFIX = "[INFO] ";
private static final String INFO_COLOR_PREFIX = "[" + colorStr("INFO", GREEN) + "] ";
private static final String WARN_PREFIX = "[WARN] ";
private static final String WARN_COLOR_PREFIX = "[" + colorStr("WARN", YELLOW) + "] ";
private static final String ERROR_PREFIX = "[ERROR] ";
private static final String ERROR_COLOR_PREFIX = "[" + colorStr("ERROR", RED) + "] ";
static {
if (System.console() != null) {
enableColor = true;
// under windows, only support cygwin and mingw
if (OSUtils.isWindows() && !OSUtils.isCygwinOrMinGW()) {
enableColor = false;
}
}
}
/**
* set logger Level
*
* @param msg
* @see java.util.logging.Level
* @param level
* @return
*/
public static void red(String msg) {
if (enable) {
System.out.println("" + msg + "");
public static Level level(Level level) {
Level old = LEVEL;
LEVEL = level;
return old;
}
/**
* get current logger Level
*
* @return
*/
public static Level level() {
return LEVEL;
}
public static String black(String msg) {
if (enableColor) {
return colorStr(msg, BLACK);
} else {
return msg;
}
}
public static String red(String msg) {
if (enableColor) {
return colorStr(msg, RED);
} else {
return msg;
}
}
public static String green(String msg) {
if (enableColor) {
return colorStr(msg, GREEN);
} else {
return msg;
}
}
public static String yellow(String msg) {
if (enableColor) {
return colorStr(msg, YELLOW);
} else {
return msg;
}
}
public static String blue(String msg) {
if (enableColor) {
return colorStr(msg, BLUE);
} else {
return msg;
}
}
public static String magenta(String msg) {
if (enableColor) {
return colorStr(msg, MAGENTA);
} else {
return msg;
}
}
public static String cyan(String msg) {
if (enableColor) {
return colorStr(msg, CYAN);
} else {
System.err.println(msg);
return msg;
}
}
public static void green(String msg) {
if (enable) {
System.out.println("" + msg + "");
public static String white(String msg) {
if (enableColor) {
return colorStr(msg, WHITE);
} else {
System.out.println(msg);
return msg;
}
}
private static String colorStr(String msg, int colorCode) {
return "\033[" + colorCode + "m" + msg + RESET;
}
public static void trace(String msg) {
if (canLog(Level.FINEST)) {
if (enableColor) {
System.out.println(TRACE_COLOR_PREFIX + msg);
} else {
System.out.println(TRACE_PREFIX + msg);
}
}
}
public static void trace(String format, Object... arguments) {
if (canLog(Level.FINEST)) {
trace(format(format, arguments));
}
}
public static void yellow(String msg) {
if (enable) {
System.out.println("" + msg + "");
public static void trace(Throwable t) {
if (canLog(Level.FINEST)) {
t.printStackTrace(System.out);
}
}
public static void debug(String msg) {
if (canLog(Level.FINER)) {
if (enableColor) {
System.out.println(DEBUG_COLOR_PREFIX + msg);
} else {
System.out.println(msg);
System.out.println(DEBUG_PREFIX + msg);
}
}
}
public static void debug(String format, Object... arguments) {
if (canLog(Level.FINER)) {
debug(format(format, arguments));
}
}
public static void debug(Throwable t) {
if (canLog(Level.FINER)) {
t.printStackTrace(System.out);
}
}
public static void info(String msg) {
green(msg);
if (canLog(Level.CONFIG)) {
if (enableColor) {
System.out.println(INFO_COLOR_PREFIX + msg);
} else {
System.out.println(INFO_PREFIX + msg);
}
}
}
public static void info(String format, Object... arguments) {
green(format(format, arguments));
if (canLog(Level.CONFIG)) {
info(format(format, arguments));
}
}
public static void info(Throwable t) {
if (canLog(Level.CONFIG)) {
t.printStackTrace(System.out);
}
}
public static void warn(String msg) {
yellow(msg);
if (canLog(Level.WARNING)) {
if (enableColor) {
System.out.println(WARN_COLOR_PREFIX + msg);
} else {
System.out.println(WARN_PREFIX + msg);
}
}
}
public static void warn(String format, Object... arguments) {
yellow(format(format, arguments));
if (canLog(Level.WARNING)) {
warn(format(format, arguments));
}
}
public static void warn(Throwable t) {
if (canLog(Level.WARNING)) {
t.printStackTrace(System.out);
}
}
public static void error(String msg) {
red(msg);
if (canLog(Level.SEVERE)) {
if (enableColor) {
System.out.println(ERROR_COLOR_PREFIX + msg);
} else {
System.out.println(ERROR_PREFIX + msg);
}
}
}
public static void error(String format, Object... arguments) {
red(format(format, arguments));
if (canLog(Level.SEVERE)) {
error(format(format, arguments));
}
}
public static void error(Throwable t) {
if (canLog(Level.SEVERE)) {
t.printStackTrace(System.out);
}
}
private static String format(String from, Object... arguments) {
@ -74,4 +274,8 @@ public abstract class AnsiLog {
}
return null;
}
private static boolean canLog(Level level) {
return level.intValue() >= LEVEL.intValue();
}
}

@ -7,11 +7,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.taobao.arthas.boot.IOUtils;
/**
* A class for executing on the command line and returning the result of
* execution.
@ -20,8 +15,6 @@ import com.taobao.arthas.boot.IOUtils;
*/
public class ExecutingCommand {
private static final Logger LOG = LoggerFactory.getLogger(ExecutingCommand.class);
private ExecutingCommand() {
}
@ -52,10 +45,12 @@ public class ExecutingCommand {
try {
p = Runtime.getRuntime().exec(cmdToRunWithArgs);
} catch (SecurityException e) {
LOG.trace("Couldn't run command {}: {}", Arrays.toString(cmdToRunWithArgs), e);
AnsiLog.trace("Couldn't run command {}:", Arrays.toString(cmdToRunWithArgs));
AnsiLog.trace(e);
return new ArrayList<String>(0);
} catch (IOException e) {
LOG.trace("Couldn't run command {}: {}", Arrays.toString(cmdToRunWithArgs), e);
AnsiLog.trace("Couldn't run command {}:", Arrays.toString(cmdToRunWithArgs));
AnsiLog.trace(e);
return new ArrayList<String>(0);
}
@ -68,10 +63,12 @@ public class ExecutingCommand {
}
p.waitFor();
} catch (IOException e) {
LOG.trace("Problem reading output from {}: {}", Arrays.toString(cmdToRunWithArgs), e);
AnsiLog.trace("Problem reading output from {}:", Arrays.toString(cmdToRunWithArgs));
AnsiLog.trace(e);
return new ArrayList<String>(0);
} catch (InterruptedException ie) {
LOG.trace("Interrupted while reading output from {}: {}", Arrays.toString(cmdToRunWithArgs), ie);
AnsiLog.trace("Problem reading output from {}:", Arrays.toString(cmdToRunWithArgs));
AnsiLog.trace(ie);
Thread.currentThread().interrupt();
} finally {
IOUtils.close(reader);

@ -1,4 +1,4 @@
package com.taobao.arthas.boot;
package com.taobao.arthas.common;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
Loading…
Cancel
Save