日志记录和监控是移动应用稳定性的两大支柱。根据Gartner(2025)的数据,APM解决方案市场到2027年将达到80亿美元。正确的日志记录不仅能够发现错误,还能在问题影响用户之前进行预测。
要点
iOS上的移动应用日志记录基于os_log构建 — Apple的内置系统,自iOS 10起可用。os_log将日志写入单一系统日志(在设备上或通过Console.app),支持类别、级别和隐私标签。通过Console.app和xcrun在iOS上结合日志记录和监控,可以实时跟踪错误和性能。
os_log的级别包括:Default、Info、Debug、Error、Fault。在生产环境中,保留Error和Fault — Debug和Info被禁用。选择正确的级别是iOS上移动应用监控策略的一部分。隐私:%{public}@用于未受保护的数据,%{private}@用于个人数据。
CocoaLumberjack是一个流行的iOS日志记录库。与os_log不同,它支持自定义格式、异步写入和日志轮转。DDLog、DDTTYLogger(控制台)、DDFileLogger(带轮转的文件)。对于远程监控,CocoaLumberjack可以与os_log结合使用 — 写入文件进行远程日志记录,并写入os_log供Console.app使用。
Android上的移动应用日志记录使用Timber — Jake Wharton的库,已成为平台的标准。Timber是Android Log(Logcat)的包装器,自动添加类标签并配置Tree。Timber是Android移动应用监控系统的一部分:DebugTree用于调试,CrashlyticsTree用于发送数据。
Timber使用Tree — 决定如何处理日志的组件。在调试版本中,使用DebugTree(输出到Logcat),在发布版本中 — CrashlyticsTree(发送崩溃)。Timber.wtf()记录致命错误。Timber.tag("CustomTag")覆盖标签。为了有效监控,Timber与APM工具结合使用。
Android Log的级别包括:VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT。ProGuard/R8在发布版本中移除Log.d和Log.v — Timber允许通过Plant进行日志记录。级别的选择影响移动应用监控的质量 — 在生产环境中,保留WARN和ERROR。
| 工具 | 平台 | 格式 | 轮转 | 远程 | 复杂度 |
|---|---|---|---|---|---|
| os_log | iOS | 结构化 | 系统 | Console.app | 低 |
| CocoaLumberjack | iOS | 文本/JSON | DDFileLogger | 是(自定义) | 中 |
| Timber | Android | 文本 | Logcat/自定义 | Tree | 低 |
| Sentry | iOS/Android | JSON | 服务器 | 是 | 中 |
| Logcat | Android | 文本 | 缓冲区 | ADB | 低 |
选择日志记录工具时,请考虑:是否需要远程日志记录、日志变更的频率以及谁将进行分析。对于初创公司,os_log或Timber就足够了。对于企业 — CocoaLumberjack配合服务器发送。在IT Sectr,我们为Android使用Timber + Crashlytics组合,为iOS使用os_log + CocoaLumberjack组合。
结构化日志记录 — 以JSON格式而非纯文本记录日志。示例:我们不写"User login failed",而是写{"event": "login_failed", "user_id": 123, "reason": "invalid_password"}。这是自动监控的基础 — ELK栈和Grafana可以过滤、聚合和分析此类数据。
按字段过滤:查找过去一小时内所有event=crash的日志。聚合:按应用版本构建错误数量图表。与ELK(Elasticsearch、Logstash、Kibana)或Grafana集成。结构化日志记录对于首次发布不是强制性的,但当DAU超过10,000时变得至关重要。
远程日志记录 — 将日志从设备发送到服务器进行集中监控。通过自定义Tree(Android)或HTTP请求实现。只发送Error和Warning — 不要浪费用户的流量。日志轮转:DDFileLogger(iOS)每1 MB或1天。在Android上,Logcat缓冲区是有限的。
应用性能监控(APM) — 一类用于移动应用监控的工具。APM衡量:启动时间、网络请求、FPS、内存使用、崩溃频率。主要参与者:Sentry(Performance)、New Relic Mobile、Datadog Mobile。
Sentry — 不仅提供崩溃报告,还提供性能监控。Sentry Performance创建分布式追踪,显示每个阶段花费的时间:从按钮按下到服务器响应。支持iOS、Android、Flutter、React Native。每月最多5,000个事件免费。
New Relic Mobile提供指标:会话数、应用内时间、崩溃频率、网络请求。Datadog Mobile是更现代的工具,具有实时仪表板和警报。两者都是付费的,但有免费层级。IT Sectr建议从Firebase Performance开始,当DAU超过100,000时切换到付费APM。
Firebase Performance — Google提供的免费移动应用监控工具。自动收集指标:应用启动时间、HTTP请求(URL、方法、响应代码)、FPS。对于自定义追踪,请使用Trace API。集成:将SDK添加到build.gradle(Android)或Podfile(iOS)。
Trace — 带有开始和结束的时间段,由您测量。示例:trace = FirebasePerformance.getInstance().newTrace("checkout_process")。指标 — 数值指标(响应大小、项目数量)。Firebase Performance不需要服务器基础设施 — 所有数据通过Firebase SDK传输。在监控移动应用时,Trace API为性能分析提供上下文。
常见问题
标准级别:ERROR(严重错误)、WARN(潜在问题)、INFO(关键事件)、DEBUG(调试)、VERBOSE(详细追踪)。在生产环境中,保留ERROR、WARN和INFO,其余禁用。
Timber是Jake Wharton开发的Logcat包装库,用于Android上的移动应用日志记录。它自动插入类标签、配置Tree,并只需一行代码即可在生产环境中禁用日志。
APM(应用性能监控) — 一类用于跟踪性能的工具:启动时间、网络请求、内存使用、崩溃频率。在监控移动应用时,New Relic、Datadog和Firebase Performance有助于在用户投诉之前发现瓶颈。
对于初创公司,Firebase Performance就足够了 — 这是一个免费的移动应用监控工具。当需要详细追踪和自定义仪表板时,可以连接New Relic和Datadog。IT Sectr建议从Firebase开始,当DAU超过100,000时切换到付费解决方案。
结构化日志记录是一种以JSON或键值对形式(而非纯文本)的日志格式。它允许按字段过滤日志、构建图表并在ELK或Grafana中自动分析。没有结构化日志,很难在数千条记录中找到模式。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。