android Log日志输出
2017-07-25 14:24
281 查看
1、打出的log后面要根上这个log的文件源头的连接,我可以直接点击跳转到log的位置
2、log中还能提示我当前的线程名,方便调试
3、可以打印出map,json这样的对象
4、release包中不打印log
5、可以控制log是否显示
原文链接和参考链接
http://www.jianshu.com/p/8bce4580c57e
https://github.com/AriaLyy/BlogDemo/blob/master/MyLoggerDemo/app/src/main/java/com/example/yuyu/mylogger/L.java
http://blog.csdn.net/wangshihui512/article/details/51042704
2、log中还能提示我当前的线程名,方便调试
3、可以打印出map,json这样的对象
4、release包中不打印log
5、可以控制log是否显示
import android.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.Map; import java.util.Set; /** * 普通的Log管理类 */ public class LogUtils { /** * Drawing toolbox */ private static final char TOP_LEFT_CORNER = '╔'; private static final char BOTTOM_LEFT_CORNER = '╚'; private static final char MIDDLE_CORNER = '╟'; private static final char HORIZONTAL_DOUBLE_LINE = '║'; private static final String DOUBLE_DIVIDER = "════════════════════════════════════════════"; private static final String SINGLE_DIVIDER = "────────────────────────────────────────────"; private static final String TOP_BORDER = TOP_LEFT_CORNER + DOUBLE_DIVIDER + DOUBLE_DIVIDER; private static final String BOTTOM_BORDER = BOTTOM_LEFT_CORNER + DOUBLE_DIVIDER + DOUBLE_DIVIDER; private static final String MIDDLE_BORDER = MIDDLE_CORNER + SINGLE_DIVIDER + SINGLE_DIVIDER; private static final char I = 'I', W = 'W', D = 'D', E = 'E', V = 'V', A = 'A', M = 'M'; static String LINE_SEPARATOR = System.getProperty("line.separator"); //等价于"\n\r",唯一的作用是能装逼 static int JSON_INDENT = 4; private LogUtils() { /* cannot be instantiated */ throw new UnsupportedOperationException("cannot be instantiated"); } public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化 private static final String TAG = "----->"; /** * 打印MAp */ public static void m(Map map) { Set set = map.entrySet(); if (set.size() < 1) { printLog(D, "[]"); return; } int i = 0; String[] s = new String[set.size()]; for (Object aSet : set) { Map.Entry entry = (Map.Entry) aSet; s[i] = entry.getKey() + " = " + entry.getValue() + ",\n"; i++; } printLog(V, s); } /** * 打印JSON * * @param jsonStr */ public static void j(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; } message = LINE_SEPARATOR + message; String[] lines = message.split(LINE_SEPARATOR); StringBuilder sb = new StringBuilder(); printLog(D, lines); } } // 下面四个是默认tag的函数 public static void i(String... msg) { if (isDebug) printLog(I, msg); } public static void d(String... msg) { if (isDebug) printLog(D, msg); } public static void w(String... msg) { if (isDebug) printLog(W, msg); } public static void e(String... msg) { if (isDebug) printLog(E, msg); } public static void v(String... msg) { if (isDebug) printLog(V, msg); } // 下面是传入自定义tag的函数 public static void i(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void d(String tag, String msg) { if (isDebug) Log.d(tag, msg); } public static void w(String tag, String msg) { if (isDebug) Log.w(tag, msg); } public static void e(String tag, String msg) { if (isDebug) Log.e(tag, msg); } public static void v(String tag, String msg) { if (isDebug) Log.v(tag, msg); } //带异常的 public static void i(String tag, String msg, Throwable tr) { if (isDebug) Log.i(tag, msg, tr); } public static void d(String tag, String msg, Throwable tr) { if (isDebug) Log.d(tag, msg, tr); } public static void w(String tag, String msg, Throwable tr) { if (isDebug) Log.w(tag, msg, tr); } public static void e(String tag, String msg, Throwable tr) { if (isDebug) Log.e(tag, msg, tr); } public static void v(String tag, String msg, Throwable tr) { if (isDebug) Log.v(tag, msg, tr); } /** * 同意打印 * * @param type * @param str */ private static void printHunk(char type, String str) { switch (type) { case I: Log.i(TAG, str); break; case D: Log.d(TAG, str); break; case E: Log.e(TAG, str); break; case V: Log.v(TAG, str); break; case A: Log.wtf(TAG, str); break; case W: Log.w(TAG, str); break; } } /** * 打印头部信息 * * @param type */ private static void printHead(char type) { printHunk(type, TOP_BORDER); printHunk(type, HORIZONTAL_DOUBLE_LINE + " Thread:"); printHunk(type, HORIZONTAL_DOUBLE_LINE + " " + Thread.currentThread().getName()); printHunk(type, MIDDLE_BORDER); } /** * 打印Log被调用的位置 * * @param type */ private static void printLocation(char type, String... msg) { StackTraceElement[] stack = Thread.currentThread().getStackTrace(); int i = 0; for (StackTraceElement e : stack) { String name = e.getClassName(); if (!name.equals(LogUtils.class.getName())) { i++; } else { break; } } i += 3; String className = stack[i].getFileName(); String methodName = stack[i].getMethodName(); int lineNumber = stack[i].getLineNumber(); StringBuilder sb = new StringBuilder(); printHunk(type, HORIZONTAL_DOUBLE_LINE + " Location:"); sb.append(HORIZONTAL_DOUBLE_LINE) .append(" (").append(className).append(":").append(lineNumber).append(")# ").append(methodName); printHunk(type, sb.toString()); printHunk(type, msg == null || msg.length == 0 ? BOTTOM_BORDER : MIDDLE_BORDER); } /** * 打印消息 * * @param type * @param msg */ private static void printMsg(char type, String... msg) { printHunk(type, HORIZONTAL_DOUBLE_LINE + " msg:"); for (String str : msg) { printHunk(type, HORIZONTAL_DOUBLE_LINE + " " + str); } printHunk(type, BOTTOM_BORDER); } /** * 打印log * * @param type * @param msg */ private static void printLog(char type, String... msg) { printHead(type); printLocation(type, msg); if (msg == null || msg.length == 0) { return; } printMsg(type, msg); } }
原文链接和参考链接
http://www.jianshu.com/p/8bce4580c57e
https://github.com/AriaLyy/BlogDemo/blob/master/MyLoggerDemo/app/src/main/java/com/example/yuyu/mylogger/L.java
http://blog.csdn.net/wangshihui512/article/details/51042704
相关文章推荐
- android中无法在华为手机输出Log.v和Log.d级别的日志问题总结
- Android Log输出 log开关 日志打印器 LogUtil
- android-基础知识:android调试总结(Log日志输出, Debug, 单元测试)
- 在android jni中添加输出日志Log
- 用C++使用Android Log API输出日志
- android orhanobut logger打印那个类第几行调用log输出,在输出日志上上点击跳转到源代码
- Android 如何统一管理log日志,在发布版本时不输出任何日志信息。
- android应用如何在发布市场时关掉所有的Log日志输出
- 对于Android系统Log输出日志的封装LogUtils
- Android开发相关——Log日志输出显示不完整以及GsonFormat
- android应用如何在发布市场时关掉所有的Log日志输出
- android中无法在华为手机输出Log.v和Log.d级别的日志问题总结
- Cocos2d-x 中如何输出 Android手机下 带Tag的Log日志
- 对于Android系统Log输出日志的封装LogUtils
- Android之系统Log输出日志的封装类LogUtil
- Android关于log日志,华为不输出log.v,log.d(zz)
- android应用如何在发布市场时关掉所有的Log日志输出
- Android之系统Log输出日志的封装类LogUtil
- Android——使用StackTraceElement实现自己的Log日志输出管理类
- android log日志文件输出