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

超级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工具希望对大家有用。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值