Ghi log và giám sát là hai trụ cột của sự ổn định ứng dụng di động. Theo Gartner (2025), thị trường giải pháp APM sẽ đạt 8 tỷ đô la vào năm 2027. Ghi log đúng cách không chỉ cho phép tìm lỗi mà còn dự đoán vấn đề trước khi chúng ảnh hưởng đến người dùng.
Những điểm chính
Ghi log ứng dụng di động trên iOS được xây dựng trên os_log — hệ thống tích hợp của Apple, có sẵn từ iOS 10. os_log ghi log vào một log hệ thống duy nhất (trên thiết bị hoặc qua Console.app), hỗ trợ danh mục, cấp độ và thẻ riêng tư. Sự kết hợp giữa ghi log và giám sát trên iOS qua Console.app và xcrun cho phép theo dõi lỗi và hiệu suất trong thời gian thực.
os_log có các cấp độ: Default, Info, Debug, Error, Fault. Trong sản xuất, giữ lại Error và Fault — Debug và Info bị vô hiệu hóa. Chọn đúng cấp độ là một phần của chiến lược giám sát ứng dụng di động trên iOS. Quyền riêng tư: %{public}@ cho dữ liệu không được bảo vệ, %{private}@ cho dữ liệu cá nhân.
CocoaLumberjack là một thư viện phổ biến cho ghi log iOS. Không giống os_log, nó hỗ trợ định dạng tùy chỉnh, ghi không đồng bộ và xoay vòng log. DDLog, DDTTYLogger (bảng điều khiển), DDFileLogger (tệp có xoay vòng). Để giám sát từ xa, CocoaLumberjack có thể kết hợp với os_log — ghi vào tệp cho ghi log từ xa và vào os_log cho Console.app.
Để ghi log ứng dụng di động trên Android, sử dụng Timber — một thư viện của Jake Wharton đã trở thành tiêu chuẩn cho nền tảng. Timber là một lớp bọc trên Android Log (Logcat) tự động thêm thẻ lớp và cấu hình Tree. Timber là một phần của hệ thống giám sát ứng dụng di động Android: DebugTree để gỡ lỗi, CrashlyticsTree để gửi dữ liệu.
Timber sử dụng Tree — một thành phần quyết định làm gì với log. Trong bản dựng gỡ lỗi, DebugTree (đầu ra đến Logcat), trong bản phát hành — CrashlyticsTree (gửi sự cố). Timber.wtf() ghi log lỗi nghiêm trọng. Timber.tag("CustomTag") ghi đè thẻ. Để giám sát hiệu quả, Timber được kết hợp với các công cụ APM.
Android Log có các cấp độ: VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT. ProGuard/R8 xóa Log.d và Log.v trong bản phát hành — Timber cho phép ghi log qua Plant. Việc chọn cấp độ ảnh hưởng đến chất lượng giám sát ứng dụng di động — trong sản xuất, giữ lại WARN và ERROR.
| Công cụ | Nền tảng | Định dạng | Xoay vòng | Từ xa | Độ phức tạp |
|---|---|---|---|---|---|
| os_log | iOS | Có cấu trúc | Hệ thống | Console.app | Thấp |
| CocoaLumberjack | iOS | Văn bản/JSON | DDFileLogger | Có (tùy chỉnh) | Trung bình |
| Timber | Android | Văn bản | Logcat/Tùy chỉnh | Tree | Thấp |
| Sentry | iOS/Android | JSON | Máy chủ | Có | Trung bình |
| Logcat | Android | Văn bản | Bộ đệm | ADB | Thấp |
Khi chọn công cụ ghi log, hãy cân nhắc: bạn có cần ghi log từ xa không, log thay đổi thường xuyên như thế nào và ai sẽ phân tích chúng. Đối với startup, os_log hoặc Timber là đủ. Đối với doanh nghiệp — CocoaLumberjack với gửi đến máy chủ. Tại IT Sectr, chúng tôi sử dụng kết hợp Timber + Crashlytics cho Android và os_log + CocoaLumberjack cho iOS.
Ghi log có cấu trúc — ghi log ở định dạng JSON thay vì văn bản thuần. Ví dụ: thay vì "User login failed" chúng tôi ghi {"event": "login_failed", "user_id": 123, "reason": "invalid_password"}. Đây là nền tảng cho giám sát tự động — ELK stack và Grafana lọc, tổng hợp và phân tích dữ liệu như vậy.
Lọc theo trường: tìm tất cả log có event=crash trong giờ qua. Tổng hợp: xây dựng biểu đồ số lượng lỗi theo phiên bản ứng dụng. Tích hợp với ELK (Elasticsearch, Logstash, Kibana) hoặc Grafana. Ghi log có cấu trúc không bắt buộc cho các bản phát hành đầu tiên, nhưng trở nên quan trọng khi DAU vượt quá 10.000.
Ghi log từ xa — gửi log từ thiết bị đến máy chủ để giám sát tập trung. Được triển khai qua Tree tùy chỉnh (Android) hoặc yêu cầu HTTP. Chỉ gửi Error và Warning — không lãng phí lưu lượng của người dùng. Xoay vòng log: DDFileLogger (iOS) mỗi 1 MB hoặc 1 ngày. Trên Android, bộ đệm Logcat bị giới hạn.
Application Performance Monitoring (APM) — một lớp công cụ cho giám sát ứng dụng di động. APM đo lường: thời gian khởi động, yêu cầu mạng, FPS, sử dụng bộ nhớ, tần suất sự cố. Những người chơi chính: Sentry (Performance), New Relic Mobile, Datadog Mobile.
Sentry — không chỉ báo cáo sự cố mà còn giám sát hiệu suất. Sentry Performance tạo các dấu vết phân tán cho thấy mỗi giai đoạn mất bao lâu: từ nhấn nút đến phản hồi máy chủ. Hỗ trợ iOS, Android, Flutter, React Native. Miễn phí lên đến 5k sự kiện mỗi tháng.
New Relic Mobile cung cấp các chỉ số: số phiên, thời gian trong ứng dụng, tần suất sự cố, yêu cầu mạng. Datadog Mobile là một công cụ hiện đại hơn với bảng điều khiển thời gian thực và cảnh báo. Cả hai đều trả phí, nhưng có các gói miễn phí. IT Sectr khuyến nghị bắt đầu với Firebase Performance và chuyển sang APM trả phí khi DAU vượt quá 100.000.
Firebase Performance — một công cụ giám sát ứng dụng di động miễn phí từ Google. Tự động thu thập các chỉ số: thời gian khởi động ứng dụng, yêu cầu HTTP (URL, phương thức, mã phản hồi), FPS. Để theo dõi tùy chỉnh, sử dụng Trace API. Tích hợp: thêm SDK vào build.gradle (Android) hoặc Podfile (iOS).
Trace — một đoạn thời gian có bắt đầu và kết thúc mà bạn đo lường. Ví dụ: trace = FirebasePerformance.getInstance().newTrace("checkout_process"). Chỉ số — các chỉ báo số (kích thước phản hồi, số lượng mục). Firebase Performance không yêu cầu cơ sở hạ tầng máy chủ — tất cả dữ liệu đi qua Firebase SDK. Khi giám sát ứng dụng di động, Trace API cung cấp ngữ cảnh để phân tích hiệu suất.
Câu hỏi thường gặp
Các cấp độ tiêu chuẩn: ERROR (lỗi nghiêm trọng), WARN (vấn đề tiềm ẩn), INFO (sự kiện chính), DEBUG (gỡ lỗi), VERBOSE (theo dõi chi tiết). Trong sản xuất, giữ lại ERROR, WARN và INFO, các cấp độ khác bị vô hiệu hóa.
Timber là một thư viện lớp bọc trên Logcat của Jake Wharton để ghi log ứng dụng di động trên Android. Nó tự động chèn thẻ lớp, cấu hình Tree và vô hiệu hóa log trong sản xuất bằng một dòng mã.
APM (Application Performance Monitoring) — một lớp công cụ để theo dõi hiệu suất: thời gian khởi động, yêu cầu mạng, sử dụng bộ nhớ, tần suất sự cố. Khi giám sát ứng dụng di động, New Relic, Datadog và Firebase Performance giúp tìm điểm nghẽn trước khi người dùng phàn nàn.
Đối với startup, Firebase Performance là đủ — một công cụ giám sát ứng dụng di động miễn phí. New Relic và Datadog được kết nối khi cần theo dõi chi tiết và bảng điều khiển tùy chỉnh. IT Sectr khuyến nghị bắt đầu với Firebase và chuyển sang giải pháp trả phí khi DAU vượt quá 100.000.
Ghi log có cấu trúc là định dạng log ở dạng JSON hoặc khóa-giá trị thay vì văn bản thuần. Nó cho phép lọc log theo trường, xây dựng biểu đồ và tự động phân tích trong ELK hoặc Grafana. Nếu không có log có cấu trúc, rất khó tìm ra các mẫu trong hàng nghìn bản ghi.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.