You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块项目中Timber日志无法发送至Firebase Crashlytics求助

问题排查与解决方案

针对你多模块项目中Timber日志无法同步到Firebase Crashlytics的问题,结合你提供的自定义TimberReleaseTree代码,从几个关键点入手解决:

1. 移除冗余的日志过滤判断

你的log方法里重复调用了isLoggable,但Timber框架在执行log前已经会先调用isLoggable做过滤,重复判断不仅多余,还可能引发逻辑冲突。直接删除该判断即可。

2. 处理空值场景

  • tag可能为null(比如调用Timber无tag的重载方法时),Firebase Crashlytics可能会忽略空tag的日志,需要设置默认值兜底。
  • message也可能为空(比如仅传入Throwable的情况),同样需做空值处理。

修改后的TimberReleaseTree代码:

class TimberReleaseTree : Timber.Tree() {

    override fun isLoggable(tag: String?, priority: Int): Boolean {
        return priority == Log.WARN || priority == Log.ERROR
    }
    
    override fun log(priority: Int, tag: String?, message: String?, t: Throwable?) {
        // 处理空tag和空message
        val safeTag = tag ?: "AppGlobalTag"
        val safeMessage = message ?: "无日志内容"
        
        FirebaseCrashlytics.getInstance().log("$safeTag: $safeMessage")
        
        t?.let { FirebaseCrashlytics.getInstance().recordException(it) }
    }
}

3. 确认Timber初始化正确性

多模块项目中,必须在主模块的Application类里正确初始化Timber并植入自定义Tree,确保所有模块的Timber日志都能被拦截:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // 根据环境植入不同Tree
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        } else {
            Timber.plant(TimberReleaseTree())
        }
    }
}

其他模块只需依赖Timber即可直接使用,无需额外初始化。

4. 检查Firebase Crashlytics集成配置

多模块项目中需确保:

  • 所有需要打日志的模块都添加了Crashlytics依赖(使用Firebase BOM统一管理版本):
    implementation platform('com.google.firebase:firebase-bom:32.7.0')
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    
  • 主模块的build.gradle中应用了Crashlytics插件:
    plugins {
        id 'com.android.application'
        id 'com.google.gms.google-services'
        id 'com.google.firebase.crashlytics'
    }
    
  • google-services.json文件放置在主模块的src/main目录下,且配置正确。
  • AndroidManifest中未禁用Crashlytics收集(发布版默认开启,若手动配置需设为true):
    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="true" />
    

5. 测试验证

在发布版中主动触发日志测试:

// 测试错误日志
Timber.e("Timber测试错误日志")
// 测试带异常的日志
Timber.e(NullPointerException("测试空指针异常"), "异常日志测试")
// 测试警告日志
Timber.w("Timber测试警告日志")

Firebase Crashlytics的日志同步存在延迟,需等待数分钟后在控制台查看日志和异常记录。

内容的提问来源于stack exchange,提问作者JuniorKotlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:43:10