public class L {
private static boolean sDebug = true;
private static String sTag = "gacmy";
private static final int JSON_INDENT = 2;
public static void init(boolean debug) {
L.sDebug = debug;
}
public static void e(String msg, Object... params) {
e(null, msg, params);
}
public static void e(String tag, String msg, Object[] params) {
if (!sDebug) return;
LogText.e(getFinalTag(tag), String.format(msg, params));
}
public static void e(String tag,String msg){
LogText.e(getFinalTag(tag), msg);
}
public static void json(String json) {
json(null, json);
}
public static void json(String tag, String json) {
if (!sDebug) return;
LogText.e(getFinalTag(tag), getPrettyJson(json));
}
private static String getPrettyJson(String jsonStr) {
try {
jsonStr = jsonStr.trim();
if (jsonStr.startsWith("{")) {
JSONObject jsonObject = new JSONObject(jsonStr);
return jsonObject.toString(JSON_INDENT);
}
if (jsonStr.startsWith("[")) {
JSONArray jsonArray = new JSONArray(jsonStr);
return jsonArray.toString(JSON_INDENT);
}
} catch (JSONException e) {
e.printStackTrace();
}
return "Invalid Json, Please Check: " + jsonStr;
}
private static String getFinalTag(String tag) {
if (!TextUtils.isEmpty(tag)) {
return tag;
}
return sTag;
}
private static class LogText {
private static final String DOUBLE_DIVIDER = "════════════════════════════════════════════\n";
private static final String SINGLE_DIVIDER = "────────────────────────────────────────────\n";
private String mTag;
public LogText(String tag) {
mTag = tag;
}
public static void e(String tag, String content) {
LogText logText = new LogText(tag);
logText.setup(content);
}
public void setup(String content) {
setUpHeader();
setUpContent(content);
setUpFooter();
}
private void setUpHeader() {
Log.e(mTag, SINGLE_DIVIDER);
}
private void setUpFooter() {
Log.e(mTag, DOUBLE_DIVIDER);
}
public void setUpContent(String content) {
StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
Log.e(mTag, "(" + targetStackTraceElement.getFileName() + ":"
+ targetStackTraceElement.getLineNumber() + ")");
Log.e(mTag, content);
}
private StackTraceElement getTargetStackTraceElement() {
// find the target invoked method
StackTraceElement targetStackTrace = null;
boolean shouldTrace = false;
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement stackTraceElement : stackTrace) {
boolean isLogMethod = stackTraceElement.getClassName().equals(L.class.getName());
if (shouldTrace && !isLogMethod) {
targetStackTrace = stackTraceElement;
break;
}
shouldTrace = isLogMethod;
}
return targetStackTrace;
}
}
}
日志打印
最新推荐文章于 2024-04-27 22:39:52 发布