Timber

JakeWharton

Timber

使用方法

编译环境
  • 只有一个400多行的类,可以单独把它复制出来放项目里,也可以通过Gradle引用
compile 'com.jakewharton.timber:timber:3.1.0'
API
  • 定义一个Log树
public class MyApp extends Application { 
    @Override
    public void onCreate() {
        super.onCreate();
        if (BuildConfig.DEBUG) {
            Timber.plant(new Timber.DebugTree());
        } else {
            Timber.plant(new CrashReportingTree());
        }
    }
}
  • 使用,拥有Log的d v i e w 方法,但不需要传入tag
Timber.d("Activity Created");
  • 定义临时tag
Timber.tag("MainActivity");
原理
  • Tree

    之前的d v i e w 方法汇总

/**
 * {@param priority} Log.ERROR Log.WARN
 */
private void prepareLog(int priority, Throwable t, String message, Object... args) {
    // 1. 日志级别
    if (!isLoggable(priority)) return;

    // 2. message校验处理

    // 3. 获取tag
    String tag = getTag();

    // 4. 输出日志
    log(priority, tag, message, t);
}

// 1. 自定义优先级
protected boolean isLoggable(int priority) {
    return true;
}

// 3. 获取tag:线程内传参
private final ThreadLocal<String> explicitTag = new ThreadLocal<String>();

String getTag() {
    String tag = explicitTag.get();
    if (tag != null) {
        explicitTag.remove();
    }
    return tag;
}

// 实现真正的日志方法,如默认实现的DebugTree用Log,切割字符串等
protected abstract void log(int priority, String tag, String message, Throwable t);
  • 森林
private static final List<Tree> FOREST = new CopyOnWriteArrayList<Tree>();

public static void plant(Tree tree) {...}
public static void uprootAll() {
    FOREST.remove(tree)
}

Hugo

有时候需要打印方法的传参和返回值,甚至方法的执行时间,一个个拼接很麻烦,此时只要在方法上加上@DebugLog 就可以自动实现

其他

  • WebViewFragment WebView使用的正确姿势

  • PhoneNumberUtilsPhoneNumberFormattingTextWatcher Android 不为人知的API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值