盒子
盒子

Timber和Bugly使用入门

在Android开发中,打日志、crash上报、统计DAU等功能是很常见的。使用系统提供的Log类打日志很方便,但是他有一些不方便:

  • 每次需要加TAG。
  • 不会打印当前线程。
  • 不会打印当前行号。

Timber很简单的解决了这些问题。

Bugly是腾讯的一款crash上报和运营统计的平台。APP的crash上报和统计DAU等功能可以通过该平台实现,集成很简单,见Bugly Android SDK 使用指南

Timber的配置方法:build.gradle中加入 compile 'com.jakewharton.timber:timber:4.5.1'

Timber提供了DebugTree,只需要在Application的onCreate()中调用Timber.plant(new DebugTree())初始化Timber。但是DebugTree的功能还有所欠缺,比如:

  • 不会打印当前线程。
  • 不会打印当前行号。

因此需要新建一个继承Timber.DebugTree的类:

public class ThreadAwareDebugTree extends Timber.DebugTree {
@Override
protected void log(int priority, String tag, String message, Throwable t) {
if (tag != null) {
String threadName = Thread.currentThread().getName();
tag = "<" + threadName + "> " + tag;
}
super.log(priority, tag, message, t);
}
@Override
protected String createStackElementTag(StackTraceElement element) {
return super.createStackElementTag(element) + "(Line " + element.getLineNumber() + ")"; //日志显示行号
}
}

这只是debug版本的Tree,我们还需要创建release版本的Tree,叫ReleaseTree,不显示v,d,i,只显示w,e,wtf。这些日志都会以”跟踪日志”的形式上报给Bugly,实现如下:

public class ReleaseTree extends ThreadAwareDebugTree {
@Override
protected boolean isLoggable(String tag, int priority) {
if (priority == Log.VERBOSE || priority == Log.DEBUG || priority == Log.INFO) {
return false;
}
return true;
}
@Override
protected void log(int priority, String tag, String message, Throwable t) {
if (!isLoggable(tag, priority)) {
return;
}
super.log(priority, tag, message, t);
}
}

接着,在Application的onCreate()方法中添加:

if (BuildConfig.DEBUG) {
Timber.plant(new ThreadAwareDebugTree());
} else {
Timber.plant(new ReleaseTree());
}

最后,在需要打印日志的地方,调用类似Timber.v("Hello")即可,TAG为调用该语句的类名。

视频教程:Logging with Timber

支持一下
扫一扫,支持xiazdong