【问题标题】:Log only to a specific Timber Tree仅记录到特定的木材树
【发布时间】:2020-01-17 07:50:00
【问题描述】:

我正在使用timber 在我的项目中记录日志。我在Application 类中为我的应用程序植入了DebugTree。我可以使用木材来记录我的错误和异常。

我也有一个库模块要在这个项目中使用。在库模块中,我将 Timber 添加为与我的 :app 项目相同的 gradle 依赖项。我希望能够在库模块上设置一个标志以启用/禁用其日志记录,以便我可以将库日志与主 :app 项目分开。比如:

LibraryModule().setDeveloperMode(true)

到目前为止,我的所有日​​志都在打印。如果我在图书馆种一棵新树,这将为所有图书馆日志打印两次日志。

我也看过这个答案:How to tell Timber which log call is for which Tree? 但是,这不是我想要的,我不想为库模块保留日志记录优先级。

我希望我能做这样的事情,但除非树被种植,否则它不会打印任何东西。对?但是,如果我种植它,由于多棵树,原木会重复。

val libraryTree: Timber.Tree = Timber.DebugTree()
libraryTree.d("library-logs")

如何为我的图书馆启用/禁用 Timber 日志?

【问题讨论】:

    标签: android logging timber-android


    【解决方案1】:

    实际上,您不需要在图书馆本身处理种植。只需将其留给应用开发人员添加他想要的树版本,您就不会有重复的日志。

    只需记录您想要记录的内容,然后将种植留给图书馆的用户。

    如果你想在库中处理它,你可以这样做:

    class CustomLogTree(val printLogs: Boolean) : Timber.DebugTree() {
    
    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
        if (!printLogs) {
            return
        }
        super.log(priority, tag, message, t)
    }
    

    并公开更改库使用者“printLogs”标志的功能。

    同时为了防止应用植入日志打印库相关信息,调用(日志将在应用内部工作):

    Timber.uprootAll()
    

    【讨论】:

    • 如果我记录我的库的事件,开发人员将看到应用程序和库打印的日志,或者他将看不到任何日志。他如何选择禁用图书馆的日志,并在种树后享受他的应用程序的日志。 (p.s. 在 app 项目中种植一棵树允许我的库使用那棵树)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多