您的位置:首页 > 移动开发 > Android开发

Android中的日志输出(StackTraceElement)

2016-04-17 21:12 453 查看
由于Android的Log日志感觉输出并不好用,特意弄了一个日志工具类,实现了可以打印当前的类,函数,行号等信息;

使用了StackTranceElement类;

package com.lepower.utils;

import android.util.Log;
/**
* 日志输出管理
* @author fing 2016-10-11
*
*/
public class LogUtils {
public static boolean LOG_PRINT = true;

private static String generateTag() {
StackTraceElement caller = new Throwable().getStackTrace()[2];
String tag = "%s.%s(L:%d)";
String callerClazzName = caller.getClassName();
callerClazzName = callerClazzName.substring(callerClazzName
.lastIndexOf(".") + 1);
tag = String.format(tag, callerClazzName, caller.getMethodName(),
caller.getLineNumber());
return tag;
}

public static <T> void e(T msg) {
if (LOG_PRINT)
Log.e(generateTag(), "" + msg);
}

public static <T> void i(T msg) {
if (LOG_PRINT)
Log.i(generateTag(), "" + msg);
}

public static <T> void v(T msg) {
if (LOG_PRINT)
Log.v(generateTag(), "" + msg);
}

public static <T> void d(T msg) {
if (LOG_PRINT)
Log.d(generateTag(), "" + msg);
}

public static <T> void w(T msg) {
if (LOG_PRINT)
Log.w(generateTag(), "" + msg);
}

public static <T> void e(String tag, T msg) {
if (LOG_PRINT)
Log.e(generateTag()+"->"+tag, "" + msg);
}

public static <T> void d(String tag, T msg) {
if (LOG_PRINT)
Log.d(generateTag()+"->"+tag, "" + msg);
}

public static <T> void v(String tag, T msg) {
if (LOG_PRINT)
Log.v(generateTag()+"->"+tag, "" + msg);
}

public static <T> void i(String tag, T msg) {
if (LOG_PRINT)
Log.i(generateTag()+"->"+tag, "" + msg);
}

public static <T> void w(String tag, T msg) {
if (LOG_PRINT)
Log.w(generateTag()+"->"+tag, "" + msg);
}
}


StackTraceElement:

1) 由 new Throwable().getStackTrace() 返回;

2) 由Thread.currentThread().getStackTrace()返回;

返回值是一个数组:

从0开始,代表最后调用的函数

所以在上面的函数中,得到第[2]个元素,才是最终调用Log.d()等函数的StackTraceElement栈。

相应的获得对应的信息类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  StackTrace Log