换个日志打印类吧

1,106 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

换个日志打印类吧

最近观摩别人代码,发现有个很不错的日志打印类,它不仅能看出当前日志的线程,也可以定位日志在第几行,这个就比较方便了,来看看是哪个库吧。

我的日志类

我常用的是下面这个日志工具类,它伴随了我至少有五年的时间,每次新项目来的时候就会复制它,很简单,没有什么可以讲解的地方。

唯一有个地方是BuildConfig.DEBUG判断的是开发项目的环境,这样正式环境下就可以自动关闭日志,测试环境下输出日志。

那么这个日志工具类也没有什么亮点,接着看别人家的日志类

public class LogWrapper {
    /**
     * 调试开关,无论是自动还是手动都能很好的控制调试状态
     */
    public static final boolean DEBUG = BuildConfig.DEBUG;
    // private static final boolean DEBUG = true;
    private static final String TAG = "LogWrapper";

    public static void v(String tag, String msg) {
        if (DEBUG)
            Log.v(tag, msg);
    }

    public static void d( String msg) {
        if (DEBUG)
            Log.d(TAG, msg);
    }

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

    public static void i(String tag, String msg) {
        if (DEBUG)
            Log.i(tag, msg);
    }

    public static void w(String tag, String msg) {
        if (DEBUG)
            Log.w(tag, msg);
    }

    public static void e(String tag, String msg) {
        if (DEBUG)
            Log.e(tag, msg);
    }

    public static void e(String msg) {
        if (DEBUG)
            Log.e(TAG, msg);
    }

    public static void w(String tag, String msg, Throwable ex) {
        if (DEBUG)
            Log.w(tag, msg, ex);
    }

    public static void e(String tag, String msg, Throwable ex) {
        if (DEBUG)
            Log.e(tag, msg, ex);
    }

}

别人家的日志类

看看图

logger_output.png

看到了吗,花里胡哨的,但是它可以很明显且好用的几个功能。

  1. 判断日志的线程,可以很简单的看出当前日志是在主线程还是子线程,是子线程的话,我们就不能去更新界面。

  2. 定位日志的打印位置。是不是有什么有一些莫名其妙的日志打印出来,我们却不知道日志来自哪里,而这个库点击蓝色部分的链接,就可以跳转到相应位置。

  3. json/xml 支持输出。一般都是需要Gson转成字符串,这个库可以直接输出,剩了一步。

  4. 支持拦截器操作。简单几步过滤日志。

它的名字叫logger,在github上已经有13K的Star,大家用起来吧。

logger