由于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栈。
相应的获得对应的信息类。