Android分享之Log工具类

Android分享之Log工具类

先上代码,需要的直接copy

package com.joey.utilsdemo;

import android.util.Log;

/**
 * 日志打印工具类
 * 2016/11/03 <br/>
 *
 * @author Joey Huang QQ:273179370)
 */
public class L {
    //默认的TAG,建议后面加下划线
    private static final String DEFAULT_TAG = "joey_";

    //日志等级(不想打印日志,可设置为 log.ASSERT)
    public static int LOG_LEVEL = Log.VERBOSE;

    //防止实例
    private L() {
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    //生成TAG
    public static String createTag(Object o) {
        return o == null ? createTag() : DEFAULT_TAG + o.getClass().getSimpleName();
    }

    //生成默认TAG
    public static String createTag() {
        return DEFAULT_TAG;
    }

    public static void v(String msg) {
        if (Log.VERBOSE >= LOG_LEVEL)
            Log.v(DEFAULT_TAG, msg);
    }

    public static void d(String msg) {
        if (Log.DEBUG>=LOG_LEVEL)
            Log.d(DEFAULT_TAG, msg);
    }

    public static void i(String msg) {
        if (Log.INFO>=LOG_LEVEL)
            Log.i(DEFAULT_TAG, msg);
    }

    public static void w(String msg) {
        if (Log.WARN>=LOG_LEVEL)
            Log.w(DEFAULT_TAG, msg);
    }

    public static void e(String msg) {
        if (Log.ERROR>=LOG_LEVEL) {
            e(DEFAULT_TAG, msg);
        }
    }

    public static void v(String tag, String msg) {
        if (Log.VERBOSE>=LOG_LEVEL)
            Log.v(tag, msg);
    }

    public static void d(String tag, String msg) {
        if (Log.DEBUG>=LOG_LEVEL)
            Log.d(tag, msg);
    }

    public static void i(String tag, String msg) {
        if (Log.INFO>=LOG_LEVEL)
            Log.i(tag, msg);
    }

    public static void w(String tag, String msg) {
        if (Log.WARN>=LOG_LEVEL)
            Log.w(tag, msg);
    }

    public static void e(String tag, String msg) {
        if (Log.ERROR>=LOG_LEVEL) {
            StackTraceElement targetStackTraceElement = getTargetStackTraceElement();
            Log.e(tag, "(" + targetStackTraceElement.getFileName() + ":" + targetStackTraceElement.getLineNumber() + ")");
            Log.e(tag, msg);
        }
    }

    //用于打印可以忽略的信息,比如说被忽视的catch
    public static void ignore(String tag, String msg) {
        if (Log.VERBOSE>=LOG_LEVEL)
            Log.v(tag, "ignore_" + msg);
    }

    //来自鸿洋大神的手笔
    private static StackTraceElement getTargetStackTraceElement() {
        // find the target invoked method
        StackTraceElement targetStackTrace = null;
        boolean shouldTrace = false;
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        for (StackTraceElement stackTraceElement : stackTrace) {
            boolean isLogMethod = stackTraceElement.getClassName().equals(L.class.getName())||stackTraceElement.getClassName().startsWith("java.lang");
            if (shouldTrace && !isLogMethod) {
                targetStackTrace = stackTraceElement;
                break;
            }
            shouldTrace = isLogMethod;
        }
        return targetStackTrace;
    }
}

如何才能摆好姿势

首先 设置TAG 小弟基本每个类都有设置TAG,谁用谁知道。

public class MainActivity extends AppCompatActivity {
    private final String TAG = L.createTag(this);
    //.......
}

设置打印内容 通常是 方法名:内容

    private void method() {
        L.v(TAG,"method:"+"我是v");
        L.d(TAG,"method:"+"我是d");
        L.i(TAG,"method:"+"我是i");
        L.w(TAG,"method:"+"我是w");
        L.e(TAG,"method:"+"我是e");
        L.ignore(TAG,"method:"+"我是ignore");
    }

打印结果如下

这里写图片描述
注:点击图中的绿色MainActivity.java:25,可快速定位到方法位置

心得体会
1.每个类都加一个TAG,这样可以确保快速的找到log日志的位置
2.容易出错的位置建议使用e打印,不仅颜色显眼,而且能够快速的定位log位置
3.不重视的catch也要打印日志,使用ignore打印,方便后续筛选,往往这种地方非常容易出问题

五颜六色的日志,是不是很酷
顺便分享下我的颜色
各日志等级颜色16进制如下:

V使用:#5D8C00
D使用:#5F89B3
IW使用:#BFA160
EA使用:#CC4141

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值