Lọc log Logcat hiệu quả: adb, Android Studio và trình duyệt
Một thiết bị Android có thể sinh hàng trăm dòng log mỗi giây. Kỹ năng quan trọng nhất không phải là đọc hết, mà là lọc đúng. Bài viết tổng hợp các cách lọc log từ dòng lệnh, Android Studio đến trình duyệt.
Lọc bằng adb logcat
Lọc theo mức độ
Cú pháp bộ lọc của logcat là tag:mức, trong đó * đại diện cho mọi tag. Ví dụ chỉ xem lỗi trở lên của mọi tag:
adb logcat *:E
Lọc theo tag
Muốn xem riêng tag PaymentFlow từ mức Debug và tắt toàn bộ phần còn lại (S nghĩa là Silent):
adb logcat PaymentFlow:D *:S
Hoặc viết gọn với tùy chọn -s:
adb logcat -s PaymentFlow:D
Có thể kết hợp nhiều tag cùng lúc:
adb logcat Auth:I Sync:D *:S
Lọc theo ứng dụng
Log của một ứng dụng nằm trong một tiến trình. Lấy PID của ứng dụng rồi lọc theo nó:
adb logcat --pid=$(adb shell pidof -s com.example.app)
Lưu ý: khi ứng dụng khởi động lại, PID thay đổi và bạn cần chạy lại lệnh.
Kết hợp với grep
Bộ lọc của logcat chỉ làm việc với tag và mức độ. Để tìm theo nội dung, hãy kết hợp với grep (hoặc findstr trên Windows):
adb logcat | grep -i "timeout"
Định dạng đầu ra
Tùy chọn -v thay đổi cách hiển thị. -v threadtime (mặc định) hiện đủ ngày giờ, PID, TID; -v color tô màu theo mức độ, rất dễ nhìn khi xem trực tiếp trên terminal.
Lọc trong Android Studio
Cửa sổ Logcat của Android Studio dùng ngôn ngữ truy vấn dạng khóa:giá trị. Một số truy vấn hữu ích:
| Truy vấn | Ý nghĩa |
|---|---|
package:mine | Chỉ log của ứng dụng đang mở trong dự án. |
level:error | Từ mức Error trở lên. |
tag:PaymentFlow | Tag chứa chuỗi “PaymentFlow”. |
message:timeout | Nội dung chứa “timeout”. |
-tag:Choreographer | Loại bỏ tag gây nhiễu. |
is:crash | Chỉ các dòng liên quan tới crash. |
age:5m | Log trong 5 phút gần nhất. |
Các điều kiện có thể kết hợp, ví dụ package:mine level:warn -tag:OkHttp. Bạn cũng có thể lưu truy vấn hay dùng làm bộ lọc yêu thích.
Lọc trên trình duyệt với HVTD-9803 LogCat
Khi xem log từ xa trên trang công cụ, thanh công cụ phía trên bảng log cung cấp:
- Ô lọc văn bản: tìm trong cả nội dung lẫn tag, không phân biệt chữ hoa thường. Gõ
paysẽ khớp với tagPaymentFlowlẫn thông điệp chứa “payment”. - Lọc mức độ: chọn Info, Debug hoặc Error để chỉ hiện đúng mức đó.
- Tự cuộn: tắt đi khi muốn đọc kỹ một đoạn mà không bị log mới đẩy trôi.
- Xoá log: làm trống bảng ngay trước khi tái hiện lỗi.
Bộ lọc áp dụng ngay cả với log đã nhận, nên bạn có thể thay đổi bộ lọc bất cứ lúc nào mà không mất dữ liệu trong phiên đang xem.
Viết log sao cho dễ lọc
Lọc hiệu quả bắt đầu từ lúc viết code:
- Tag nhất quán theo thành phần. Mỗi module một tag rõ ràng, có thể thêm tiền tố chung của ứng dụng.
- Từ khóa cố định cho sự kiện quan trọng. Ví dụ luôn bắt đầu bằng
[CHECKOUT],[SYNC]để tìm một phát ra cả luồng. - Dạng khóa=giá trị.
orderId=A1029 status=FAILED code=402dễ tìm và dễ đọc hơn một câu văn dài. - Một sự kiện, một dòng. Tránh rải một thông tin ra nhiều dòng; khi lọc, các dòng bị tách rời sẽ mất ngữ cảnh.
- Mức độ đúng. Lỗi thật phải là Error để bộ lọc mức Error bắt được. Xem bài Các mức độ log trong Android.
Quy trình lọc khi điều tra một lỗi
- Bắt đầu rộng: lọc mức Error để xem có ngoại lệ nào không.
- Tìm thấy dòng lỗi, ghi lại thời điểm và tag.
- Bỏ lọc mức, lọc theo tag hoặc từ khóa của luồng đó để xem các bước trước khi lỗi xảy ra.
- Nếu cần, xóa log và nhờ người kiểm thử tái hiện lại để có một bản log sạch.
Tóm tắt
Dù dùng adb, Android Studio hay trình duyệt, nguyên tắc lọc log đều giống nhau: thu hẹp theo mức độ, theo tag, theo tiến trình, rồi tìm theo nội dung. Kết hợp với thói quen viết log có cấu trúc, bạn sẽ tìm ra nguyên nhân lỗi trong vài phút thay vì vài giờ.