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
相关产品推荐
相关产品推荐

