android 自定义可跳转的log

本文介绍如何在Android Studio中自定义Log格式,使得日志信息能够包含可点击跳转的源代码位置链接,极大提升了程序调试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   用android studio打log,一般会是这种样式log.v(tag,”log content”);给程序调试带来很多方便,不过当程序越来越大,或者忘记在哪里打的log,再在代码中寻找打log的语句就有些麻烦,当然你可以也可以用全局搜索,不过log多了也是很吃力的;
   我们知道程序报错时,会在抛出异常时打印这些,其中出错点使可以直接跳转过去的;如图:

这里写图片描述

那么我们自己的log也可以自定义成可跳转的,事实上,只要你的log打印的字符串符合某种规则,android studio会自动添加超链接,要实现很简单,就根据上图中字符串的组织形式自己拼接就可以了。

在eclipse中 一般“at (packagename.classname.java:行号) ”这种形式;
在android studio中一般是:“at packagename.classname.medthod(classname.java:行号)”,

我们可以将获取包名,类名,行号的语句添加再自己的log.class 中,由于log不可继承,我们将封装好的字符串作为log.v(,)的msg传入就好。

 得到行号等信息需要用到stackTrace(),我们在处理异常时就是在printstackTrace();不难想象,get到的就是一个数组,其中从0到数组尾分别存放了对应栈的一个栈帧,栈顶元素保存在数组第0号;

那么我们log.v()代码是在第0号元素吗? 并不是,尝试分别打印其对应的classname或linenumber,有些信息是获取不到的,即使获取到也不是我们想要的,查阅资料,在我们调用 getstacktrack方法之后,程序本身自己又进行了四次调用,等我们得到elements后,存放打印log的element位置已经到了第4号,所以要从数组下标3进行获取,其实也可以直接打印获取到的stackTrace,找到我们想要的那一条,确定它在哪个位置;

 于是就可以自定义log了  我写的代码如下
import android.util.Log;



public class l {
    public static String s = "";
    private static int i=3
    private enum LogState {
        INFO, ERROR, ALL;
    }

    public static final LogState CURRENT_STATE = LogState.ALL;

    public static void i(final String msg) {

        StackTraceElement[] elements = Thread.currentThread().getStackTrace();

        if (elements.length < 5) {
            Log.v("test", "myLog error elements.length < 5");
        } else {
            s = "at " + elements[i].getClassName() + "." + elements[i].getMethodName() + "(" + elements[i].getClassName().substring(elements[i].getClassName().lastIndexOf(".") + 1, elements[i].getClassName().length()) +
                    ".java:"
                    + elements[i].getLineNumber() + ")";

        }
        switch (CURRENT_STATE) {
            case ALL:
            case INFO:

                Log.v("test", s + "    " + msg);
        }
    }

}

在这里将log的tag写死成“test”,也可以自己设定,经android studio测试,可以打印出有跳转到log语句;
效果图:
这里写图片描述
本文对log4J部分并未深究,难免有不妥甚至谬误,请不吝指正!
参考文献:
http://www.tuicool.com/articles/QbYjYj
http://javaeedevelop.iteye.com/blog/1729402
http://www.tuicool.com/articles/QbYjYj
http://blog.youkuaiyun.com/laihuan99/article/details/8929749?utm_source=tuicool

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值