package com.arialyy.frame.util.show; import android.util.Log; import com.arialyy.frame.util.CalendarUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Map; import java.util.Set; /** * Created by Lyy on 2015/4/1. * 写入文件的log,由于使用到反射和文件流的操作,建议在需要的地方才去使用 */ public class FL { static String LINE_SEPARATOR = System.getProperty("line.separator"); //等价于"\n\r",唯一的作用是能装逼 static int JSON_INDENT = 4; public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化 public static String PATH = "AriaFrame"; //log路径 private static String printLine(String tag, boolean isTop) { String top = "╔══════════════════════════════════════════ JSON ═══════════════════════════════════════"; String bottom = "╚═══════════════════════════════════════════════════════════════════════════════════════"; if (isTop) { Log.d(tag, top); return top; } else { Log.d(tag, bottom); return bottom; } } /** * 打印JSON * * @param jsonStr */ public static void j(String tag, String jsonStr) { if (isDebug) { String message; try { if (jsonStr.startsWith("{")) { JSONObject jsonObject = new JSONObject(jsonStr); message = jsonObject.toString(JSON_INDENT); //这个是核心方法 } else if (jsonStr.startsWith("[")) { JSONArray jsonArray = new JSONArray(jsonStr); message = jsonArray.toString(JSON_INDENT); } else { message = jsonStr; } } catch (JSONException e) { message = jsonStr; } writeLogToFile(tag, printLine(tag, true)); message = LINE_SEPARATOR + message; String temp = ""; String[] lines = message.split(LINE_SEPARATOR); for (String line : lines) { temp += "║ " + line; Log.d(tag, "║ " + line); } writeLogToFile(tag, temp); writeLogToFile(tag, printLine(tag, false)); } } // 下面四个是默认tag的函数 public static void i(Object obj, String msg) { String TAG = getTag(obj); if (isDebug) { Log.i(TAG, msg); writeLogToFile(TAG, msg); } } public static void d(Object obj, String msg) { String TAG = getTag(obj); if (isDebug) { Log.d(TAG, msg); writeLogToFile(TAG, msg); } } public static void e(Object obj, String msg) { String TAG = getTag(obj); if (isDebug) { Log.e(TAG, msg); writeLogToFile(TAG, msg); } } public static void v(Object obj, String msg) { String TAG = getTag(obj); if (isDebug) { Log.v(TAG, msg); writeLogToFile(TAG, msg); } } public static void i(String TAG, String msg) { if (isDebug) { Log.i(TAG, msg); writeLogToFile(TAG, msg); } } public static void d(String TAG, String msg) { if (isDebug) { Log.d(TAG, msg); writeLogToFile(TAG, msg); } } public static void e(String TAG, String msg) { if (isDebug) { Log.e(TAG, msg); writeLogToFile(TAG, msg); } } public static void v(String TAG, String msg) { if (isDebug) { Log.v(TAG, msg); writeLogToFile(TAG, msg); } } /** * 获取类名 */ private static String getTag(Object object) { Class<?> cls = object.getClass(); String tag = cls.getName(); String arrays[] = tag.split("\\."); tag = arrays[arrays.length - 1]; return tag; } /** * 返回日志路径 */ public static String getLogPath() { return android.os.Environment.getExternalStorageDirectory().getPath() + File.separator + PATH + ".log"; } /** * 把日志记录到文件 */ private static int writeLogToFile(String tag, String message) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(CalendarUtils.getNowDataTime()); stringBuffer.append(" "); stringBuffer.append(tag); stringBuffer.append(" "); stringBuffer.append(message); stringBuffer.append("\n"); PrintWriter writer = null; try { writer = new PrintWriter(new FileWriter(getLogPath(), true)); writer.append(stringBuffer); writer.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { writer.close(); } } return 0; } /** * 将异常信息转换为字符串 */ public static String getExceptionString(Throwable ex) { StringBuilder err = new StringBuilder(); err.append("ExceptionDetailed:\n"); err.append("====================Exception Info====================\n"); err.append(ex.toString()); err.append("\n"); StackTraceElement[] stack = ex.getStackTrace(); for (StackTraceElement stackTraceElement : stack) { err.append(stackTraceElement.toString()).append("\n"); } Throwable cause = ex.getCause(); if (cause != null) { err.append("【Caused by】: "); err.append(cause.toString()); err.append("\n"); StackTraceElement[] stackTrace = cause.getStackTrace(); for (StackTraceElement stackTraceElement : stackTrace) { err.append(stackTraceElement.toString()).append("\n"); } } err.append("==================================================="); return err.toString(); } }