package com.wj.dexknife.shell.utils;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Debug {
public static final int VERBOSE = 0;
public static final int INFO = 1;
public static final int DEBUG = 2;
public static final int WARN= 3;
public static final int ERROR = 4;
private static int mLogLevel = VERBOSE;
public static void setLogLevel(int logLevel){
mLogLevel = logLevel;
}
public static int getLogLevel(){
return mLogLevel;
}
private static DateFormat localDateFromat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static StackTraceElement getCurrentStackTraceElement() {
return Thread.currentThread().getStackTrace()[6];
}
public static String getDateLog(){
StringBuilder sBuff = new StringBuilder();
StackTraceElement s = getCurrentStackTraceElement();
sBuff.append(localDateFromat.format(new Date()))
.append(format(s));
return sBuff.toString();
}
public static String format(StackTraceElement s){
//return String.format("%s.%s(%s:%s)%n", s.getClassName(), s.getMethodName(),s.getFileName(), s.getLineNumber());
return String.format(".(%s:%s)",s.getFileName(), s.getLineNumber());
}
private static String format(int logLevel, String log) {
// INFO: Could not find stylesheet: jar:file:/C:/Users/Administrator/AppData/Local/Temp/e4jA5CD.tmp_dir1460126084/ApkToolPlus_release_1.0.6.jar!/css/jiagu.css
StringBuilder sBuff = new StringBuilder();
switch (logLevel){
case VERBOSE:
sBuff.append("VERBOSE");
break;
case INFO:
sBuff.append("INFO");
break;
case DEBUG:
sBuff.append("DEBUG");
break;
case WARN:
sBuff.append("WARN");
break;
case ERROR:
sBuff.append("ERROR");
break;
}
sBuff.append(":");
sBuff.append(getDateLog()).append(": ");
// log
if (log != null){
sBuff.append(log);
}else{
sBuff.append("null");
}
return sBuff.toString();
}
private static void stdOutput(String log){
System.out.println(log);
}
private static void errOutput(String log){
System.err.println(log);
}
private static void formatOutput(int logLevel, String log) {
if(logLevel < WARN){
stdOutput(format(logLevel, log));
}else{
errOutput(format(logLevel, log));
}
}
public static void v(String msg){
if (VERBOSE >= mLogLevel) {
formatOutput(VERBOSE, msg);
}
}
public static void i(String msg){
if (INFO >= mLogLevel) {
formatOutput(INFO, msg);
}
}
public static void d(String msg){
if (DEBUG >= mLogLevel) {
formatOutput(DEBUG, msg);
}
}
public static void w(String msg){
if (WARN >= mLogLevel) {
formatOutput(WARN, msg);
}
}
public static void e(String msg){
if (ERROR >= mLogLevel) {
formatOutput(ERROR, msg);
}
}
public static void d(Throwable e){
if(DEBUG >= mLogLevel && e != null ){
stdOutput(getDateLog());
e.printStackTrace();
}
}
public static void e(Throwable e){
if(ERROR >= mLogLevel && e != null ){
errOutput(getDateLog());
e.printStackTrace();
}
}
}