超级Log工具,能显示你的文件名、方法、行数并且可以点击到那一行

来源:互联网 发布:安卓播放增益软件 编辑:程序博客网 时间:2024/05/18 00:11

超级Log工具,能显示你的文件名、方法、行数并且可以点击到那一行

这个超级Log工具能够让你非常方便的找出你打Log的地方,
因为他在Log信息里面显示了你显示了你打印Log的类名、方法名、行数,
而且最方便的就是,你点击显示的Log的方法名,他居然可以直接跳转到你Log的地方,我也没想到会这么方便,所以强烈推荐給大家。

先看效果:

1.MainAtivity中使用工具类的截图

1

2.OtherActivity中使用工具类的截图

2

3.Log结果显示图

这里显示MainActivity后点击测试log,接着跳转到第二个页面。
3
这里你可以看到显示的行数和你打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工具希望对大家有用。

共勉:不要让年轻的资本越来越没有价值,而是奋发图强让自己后面的每一段路都更加有价值。

阅读全文
3 0