【问题标题】:Timber filter logs by tag木材按标签过滤日志
【发布时间】:2022-02-03 16:42:00
【问题描述】:

使用 Timber 时,我可以看到自动生成的标签,这很好。但是,我无法真正在代码中访问这些标签。我只能在 Logcat 中看到它们,但我不知道如何过滤它们。

我知道可以仅为调试版本打开日志记录:

if (BuildConfig.DEBUG) {
    Timber.plant(DebugTree())
}

但是,这对我来说不是很有用。我试着做:

Timber.plant(Timber.tag("TroublesomeClass"))

但我得到了:

java.lang.IllegalArgumentException: Cannot plant Timber into itself.

..这对我来说毫无意义。

有没有办法通过标签过滤Timber日志?

提前谢谢你!

【问题讨论】:

  • 在 logcat 中过滤?
  • @Arpit Shukla 这是一个选择,但它不是一个好的选择。随着项目的发展,日志记录会变得非常繁重。发生这种情况时,即使在快速机器上,Logcat 过滤也会变得非常慢。在另一个使用普通旧日志的项目中,我创建了允许过滤的自定义记录器,我喜欢它。效率更高!
  • @Arpit Shukla 它还有助于定位项目的有问题的部分,即使在发布版本中您也希望保留日志。这样一来,您就可以在不降低整个应用程序速度的情况下获得更好的错误报告。
  • 过滤后的日志要保存在哪里?
  • @Arpit Shukla 只需在标准输出中显示它们就可以了。我打算在 Logcat 中查看它们。它确实“只是”关于速度。 Logcat 实在是太慢了,无法在大型项目中高效使用。

标签: android kotlin logging timber-android


【解决方案1】:

最后,我想出了这个。其实很简单。你只需要像这样子类Timber.DebugTree

/**
* Custom Timber logging tree allowing to filter logs by Tag.
*/
class FilteringTimberTree(val allowedTags: List<String> = ArrayList(),
                        var filteringEnabled: Boolean = true) : Timber.DebugTree() {

    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
        if(!filteringEnabled || allowedTags.contains(tag)) {
            super.log(priority, tag, message, t)
        }
    }
}

然后在Application类中种树:

val allowedTags = arrayListOf("Tag1", "Tag2", "Tag3")
Timber.plant(FilteringTimberTree(allowedTags))

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2012-11-28
    • 2014-05-23
    • 2018-09-24
    • 2011-09-15
    相关资源
    最近更新 更多