Timber


使用 Timber

  • 配置 timber
implementation 'com.jakewharton.timber:timber:4.7.1'
  • 准备Log输出的自定义格式

可以直接在Application的onCreate()中调用Timber.plant(new DebugTree())实现Debug功能。但是功能有所欠缺,可以用来上传crash信息等。

ps:

Timber主要通过添加Tree实例来实现,添加Tree实例可以通过方法Timber.plant完成。

而使用DebugTree实现自动实例化

  1. 不会打印当前线程
  2. 不会打印当前行号

自己创建一个继承类来实现这两个功能。

class ThreadAwareDebugTree : Timber.DebugTree() {
    //添加当前线程
    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {

        if (tag != null) {
            val threadName = Thread.currentThread().name
            tag != "<" + threadName + ">"
        }
        super.log(priority, tag, message, t)
    }

    // 添加行号
    override fun createStackElementTag(element: StackTraceElement): String? {
        return super.createStackElementTag(element) + "Line(" + element.lineNumber + ")"
    }
}

还有一个类在 release 版本时调用打印log信息

release 版本用来以一种跟踪日志的形式上报给 Bugly,它只会显示 w,e,wtf。

class ReleaseTree : ThreadAwareDebugTree() {
    override fun isLoggable(tag: String?, priority: Int): Boolean {
        return if (priority == Log.VERBOSE || priority == Log.DEBUG || priority == Log.INFO) {
            false
        } else true
    }

    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
        if (!isLoggable(tag, priority)) {
            return
        }
        super.log(priority, tag, message, t)
    }
}
  • 准备 Application
class TimberDemoApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        if (DEBUG)
            Timber.plant(ThreadAwareDebugTree())

    }
}

添加Application

  • 调用一个log
println(Timber.v("hello"))

通过自定义的类型输出了行号的信息

重写 Log 方法

参数

priority:Int 优先级

tag:String 打印时的标签

message:String 内容

t:Throwable 抛出的异常

此方法可以用来根据发送来的 异常等信息 自定义接下来的动作。这些信息并不会被从log日志打印出来。

调用

调用log方法

 Timber.log(1, "测试打印")

打印我们发送来的信息

class MyTimberFree : Timber.Tree() {
    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
        super.log(priority, tag, message, t)
        Timber.v(message)
    }
}

发送成功,我们可以根据这些信息上传到crash中。

为什么使用Timber

  1. 项目开发时,为了方便调试,需要输出log,但是发布后,log中包含很多项目信息,如果全部暴露可能会造成安全隐患,当完全删除也不利于后期调试,因此需要一个开关,关闭开关不能输出bug,打开开关则可以输出log。

  2. 每次需要打印 TAG

  3. 不会打印当前线程

  4. 不会打印当前行号

Timber和Bugly使用入门


文章作者: TheCara
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 TheCara !
  目录