超级Log工具,能显示你的文件名、方法、行数并且可以点击到那一行
这个超级Log工具能够让你非常方便的找出你打Log的地方,
因为他在Log信息里面显示了你显示了你打印Log的类名、方法名、行数,
而且最方便的就是,你点击显示的Log的方法名,他居然可以直接跳转到你Log的地方,我也没想到会这么方便,所以强烈推荐給大家。
先看效果:
1.MainAtivity中使用工具类的截图
2.OtherActivity中使用工具类的截图
3.Log结果显示图
这里显示MainActivity后点击测试log,接着跳转到第二个页面。
这里你可以看到显示的行数和你打Log的地方是对应的,确实很方便。
在这里你可以看到文件名那里是显示蓝色的,你用鼠标单击是可以跳转到你要选择的那行数据的。
到这里大家是不是非常激动,想要立刻去使用上这个类了呢。
显示超级log的工具类:ShowUtils的代码如下
package com.example.wenzhi.logdemo;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
/**
* 本类用于详细显示log的信息
* 比如土司,或Log信息
* 本来还可以显示当前语句运行的线程,但是用的情况很少,所有没有加进去,如果需要可以自己加入
*/
public class ShowUtils {
//这里DEBUG的作用是,可以在程序完成后设置DEBUG的值为false,程序以后就不会在显示以前的打印信息
public static boolean DEBUG = true;
static String className;//文件名
static String methodName;//方法名
static int lineNumber;//行数
// static String threadName = Thread.currentThread().getName();//线程名字,能判断主线程还是子线程
private static void getMethodNames(StackTraceElement[] sElements) {
className = sElements[1].getFileName();
methodName = sElements[1].getMethodName();
lineNumber = sElements[1].getLineNumber();
}
/**
* 获取当前文件的基本信息
*/
private static StringBuffer getFileInfo() {
getMethodNames(new Throwable().getStackTrace());//获取获取包含文件名、方法名、行数的对象数据
StringBuffer buffer = new StringBuffer();
buffer.append(methodName);
buffer.append("(").append(className).append(":").append(lineNumber).append(")");
return buffer;
}
//各种Log打印
public static void e(Object o) {
if (DEBUG) {
StringBuffer buffer = getFileInfo();
Log.e("TAG", buffer + "打印:------ " + o.toString());
}
}
public static void e(int i) {
if (DEBUG) {
StringBuffer buffer = getFileInfo();
Log.e("TAG", buffer + "打印:------ " + i);
}
}
public static void e(float i) {
if (DEBUG) {
StringBuffer buffer = getFileInfo();
Log.e("TAG", buffer +"打印:------ " + i);
}
}
public static void e(boolean b) {
if (DEBUG) {
StringBuffer buffer = getFileInfo();
Log.e("TAG", buffer +"打印:------ " + b);
}
}
//各种土司
public static void ts(Context context, Object object) {
if (DEBUG) {
Toast.makeText(context, object + "", Toast.LENGTH_SHORT).show();
}
}
public static void tsl(Context context, Object object) {
if (DEBUG)
Toast.makeText(context, object + "", Toast.LENGTH_LONG).show();
}
}
其实这个类也是不难,很多人可能对StackTraceElement[]这个类不了解,其实也不用太了解,你知道怎么用就可以了。
StackTrace表示栈堆的意思,Element表示元素的意思。
上面如果整个程序不需要调试,把属性DEBUG从true变成false就不会再显示Log了。
上面使用Thread.currentThread().getStackTrace()也是可以获取到StackTraceElement[]对象的,但是为什么我不用呢,因为这样获取到的文件名是不是我们上面显示的,并且不能点击跳转到具体行。
并且大家也不用担心你new 一个Throwable().getStackTrace()对象出来会占用很对内存,因为这个内存其实在你用完的使用已经放入回收池了,就行你用new String一样的。出了这个方法,里面的东西就回收了。
好了,这个超级Log工具希望对大家有用。