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

Ionic混合应用中CLSLogv日志无法在Crashlytics面板显示

解决Crashlytics中CLSLogv日志不显示的问题

你遇到的这个情况很常见——Crashlytics能正常捕获致命异常,但自定义日志就是死活出现在控制台。我帮你梳理几个核心排查点和修复方案:

1. 先明确Crashlytics日志的显示规则

Crashlytics的自定义日志不会单独出现在控制台,它们只会附加在后续的崩溃/异常报告里。也就是说,你调用CLSLogv记录日志后,必须触发一次崩溃(比如你用的throwException()),或者手动上报一个异常,才能在对应的报告详情里看到这些日志。

你的代码里现在只捕获了SQLite异常并记录日志,但没有把这个异常上报给Crashlytics,所以这些日志根本不会被上传到后台。

2. 修改日志方法,同时上报非致命异常

把你的sendErrorToCrashlytics方法改成这样,让日志和异常绑定:

private func sendErrorToCrashlytics(error: String) {
    NSLog("Error in send error function is \(error)")
    // 记录自定义日志
    CLSLogv("%@", getVaList([error]), .error)
    // 手动上报非致命异常
    let crashError = Exceptions.SQLiteError(message: error)
    Crashlytics.crashlytics().record(error: crashError)
}

这样修改后,当SQLite异常触发时,这个错误会作为「非致命异常」出现在Crashlytics控制台,点开详情就能看到你用CLSLogv记录的日志内容了。

3. 排查初始化和配置问题

  • 确认SDK初始化时机:确保在application:didFinishLaunchingWithOptions:里完成Firebase和Crashlytics的初始化,日志记录依赖SDK完全启动:
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
        return true
    }
    
  • 检查Build Phase脚本:Xcode的Build Phases里必须添加Crashlytics的Run Script,负责上传符号表和日志:
    "${PODS_ROOT}/FirebaseCrashlytics/run"
    
  • 验证日志级别:可以明确指定日志级别,避免被控制台过滤:
    CLSLogv("%@", getVaList([error]), .error)
    

4. 测试后台线程的日志捕获

你的日志是在自定义后台队列里调用的,虽然Crashlytics支持后台线程日志,但可以先放到主线程测试,排除线程环境问题:

catch Exceptions.SQLiteError(let error) {
    DispatchQueue.main.async {
        self.sendErrorToCrashlytics(error: error)
    }
}

如果主线程里日志能正常显示,再排查后台队列的配置问题。

总结

核心问题是你只记录了日志但没有上报对应的异常,Crashlytics不会单独存储零散的日志。按照上面的方法修改后,就能在控制台的「非致命异常」板块找到带日志的错误报告了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:43:10