Logcat — nó là gì, các mức ghi log và làm việc với log

Tác giả: IT Sectr Đã đăng: 2026-05-06 Thời gian đọc: 8 phút

Logcat là công cụ Android SDK để xem thông báo hệ thống và log ứng dụng theo thời gian thực, có sẵn qua ADB hoặc bảng điều khiển tích hợp trong Android Studio. Theo Android Developers, Logcat thu thập thông báo từ tất cả các tiến trình hệ thống, lọc chúng theo mức độ quan trọng và thẻ, cho phép nhà phát triển chẩn đoán lỗi, theo dõi thực thi mã và phân tích hiệu suất. Logcat là nguồn thông tin chính khi gỡ lỗi ứng dụng Android.

Những điểm chính

  • Logcat — cửa sổ bảng điều khiển trong Android Studio để xem log hệ thống Android theo thời gian thực
  • Các mức log — VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT — xác định tầm quan trọng của thông báo và ngưỡng lọc
  • Lọc theo thẻ, mức và từ khóa cho phép cô lập log của một ứng dụng cụ thể khỏi luồng chung
  • ADB logcat — lệnh terminal để truy cập log mà không cần Android Studio, qua USB hoặc Wi-Fi
  • Log sự cố — ngoại lệ với stack trace tự động vào Logcat và chứa chẩn đoán đầy đủ về sự cố

Logcat trong Android là gì

Logcat là bộ đệm hệ thống Android nơi tất cả các tiến trình (bao gồm nhân Linux, system_server và ứng dụng) ghi thông báo theo định dạng cụ thể. Công cụ logcat, nằm trong Android SDK, đọc bộ đệm này và hiển thị thông báo theo thời gian thực. Bắt đầu từ Android 4.1 (API 16), quyền truy cập Logcat bị hạn chế: ứng dụng chỉ có thể đọc log của chính mình và log hệ thống có thể truy cập qua ADB với quyền gỡ lỗi.

Mỗi thông báo Logcat chứa năm trường: ngày và giờ, PID (định danh tiến trình), TID (định danh luồng), mức log và thẻ. Định dạng cố định và giống nhau trên tất cả các phiên bản Android. Điều này cho phép sử dụng các tiện ích grep, awk và sed để lọc log trong các pipeline CI/CD mà không phụ thuộc vào IDE.

Log được lưu trữ trong bộ đệm vòng có kích thước cố định: 256 KB cho main, 256 KB cho system và 256 KB cho events (Android 5+). Khi bộ đệm tràn, các thông báo cũ sẽ bị xóa. Nhà phát triển có thể thay đổi kích thước bộ đệm qua thuộc tính PROP logcat.size hoặc trong tùy chọn nhà phát triển của thiết bị.

Mức log và thẻ: cấu trúc thông báo Logcat

Sáu mức ghi log xác định tầm quan trọng của thông báo. Android sử dụng các mức tiêu chuẩn tương tự như các nền tảng khác nhưng với tên hằng riêng trong lớp Log. Chọn đúng mức giúp lọc log hiệu quả và tránh làm chìm các thông báo quan trọng trong các thông báo thứ cấp.

MứcHằngMục đíchHiển thị mặc định
VERBOSELog.vThông tin gỡ lỗi chi tiết tối đaKhông
DEBUGLog.dThông báo gỡ lỗi cho nhà phát triểnKhông
INFOLog.iThông báo thông tin về hoạt động của ứng dụng
WARNLog.wCảnh báo về các vấn đề tiềm ẩn
ERRORLog.eLỗi nghiêm trọng và ngoại lệ
ASSERTLog.wtfLỗi không bao giờ nên xảy ra về nguyên tắc

Thẻ: tổ chức thông báo theo mô-đun

Thẻ (tag) — chuỗi tối đa 23 ký tự xác định nguồn của thông báo. Nên sử dụng tên lớp hoặc mô-đun làm thẻ: MainActivity, AuthManager, NetworkModule. Điều này cho phép lọc log theo một thành phần cụ thể của ứng dụng. Để đồng nhất trong nhóm, bạn có thể tạo hằng thẻ trong tệp riêng hoặc sử dụng thư viện Timber, tự động chèn thẻ dựa trên tên lớp.

Log sự cố và stack trace ngoại lệ

Khi một ngoại lệ không được xử lý xảy ra, Android tự động ghi stack trace đầy đủ vào Logcat, chỉ ra lớp, phương thức, dòng mã và chuỗi gọi. Log sự cố chứa loại ngoại lệ (NullPointerException, RuntimeException), thông báo và chuỗi gọi từ điểm sự cố đến điểm vào của ứng dụng. Để phân tích log sự cố từ thiết bị người dùng, Firebase Crashlytics được sử dụng, đồng bộ hóa stack trace với bản đồ làm xáo trộn (mapping.txt cho Android).

Logcat trong Android Studio: giao diện, bộ lọc và tìm kiếm

Android Studio cung cấp giao diện đồ họa Logcat có thể truy cập qua View → Tool Windows → Logcat (Alt + 6). Cửa sổ Logcat cập nhật theo thời gian thực, hiển thị tất cả thông báo từ thiết bị đã kết nối và cho phép cấu hình các bộ lọc linh hoạt để cô lập thông tin mong muốn khỏi luồng chung.

Lọc theo mức và thẻ

Danh sách thả xuống Log Level lọc thông báo theo mức tối thiểu: chọn WARN để chỉ xem cảnh báo và lỗi, ẩn VERBOSE, DEBUG và INFO. Trường Tìm kiếm cho phép tìm theo nội dung thông báo hoặc thẻ — hỗ trợ regex, thuận tiện cho việc tìm thông báo theo mẫu.

Bộ lọc đã lưu

Saved Filters — tính năng mạnh mẽ của Logcat trong Android Studio. Bạn có thể tạo bộ lọc chỉ hiển thị thông báo có thẻ ứng dụng của bạn (tag:MyApp) và mức WARN+. Bộ lọc được lưu giữa các phiên và có sẵn từ danh sách thả xuống. Đối với dự án có nhiều mô-đun, hãy tạo bộ lọc riêng cho từng mô-đun.

text
# Biểu thức ví dụ để lọc log ứng dụng
tag:"MyApp" level:WARN # Chỉ WARN+ cho MyApp
package:"com.mycompany" # Tất cả log của gói
-tag:"okhttp" # Loại trừ log OkHttp

Xuất và phân tích

Log Logcat có thể được xuất sang tệp văn bản qua biểu tượng Save to File. Điều này hữu ích để đính kèm vào ticket trong Jira hoặc phân tích các phiên dài. Log đã xuất có thể được mở trong bất kỳ trình soạn thảo văn bản nào và áp dụng grep để tìm kiếm mẫu. Để xem được định dạng, hãy sử dụng tiện ích logcat-color.

ADB logcat: lệnh terminal cho công việc nâng cao

ADB logcat — phiên bản bảng điều khiển của Logcat, có thể truy cập qua Android Debug Bridge. Ưu điểm chính của nó là khả năng chạy trên máy chủ CI, trong tập lệnh tự động hóa và trên các thiết bị không có Android Studio. ADB logcat hỗ trợ tất cả các bộ lọc giống như GUI, nhưng với sự linh hoạt của dòng lệnh.

Các lệnh cơ bản

Lệnh adb logcat không có đối số xuất toàn bộ bộ đệm theo thời gian thực. Sử dụng Ctrl+C để dừng. Cờ -c xóa bộ đệm trước khi bắt đầu ghi — thuận tiện khi bạn cần cô lập log của bài kiểm tra hiện tại khỏi các thông báo trước đó. Cờ -b chọn loại bộ đệm: main, system, events, crash (Android 12+).

bash
# Xóa bộ đệm và bắt đầu ghi log với thẻ MyApp
adb logcat -c
adb logcat MyApp:D *:S

# Lưu log vào tệp
adb logcat -d > logcat_dump.txt

# Lọc theo PID tiến trình
adb logcat --pid=12345

Lọc bằng grep và awk

Kết hợp ADB với các tiện ích Unix mang lại sự linh hoạt tối đa. Ví dụ, bộ lọc "*:S TAG:D" chỉ hiển thị thông báo có thẻ TAG ở mức DEBUG trở lên, ẩn tất cả các thông báo khác. Để chỉ xem ngoại lệ, hãy sử dụng grep -i exception. Để phân tích tần suất lỗi, hãy áp dụng sort | uniq -c trên cột thẻ.

Logcat trong CI/CD

Trên máy chủ CI, Logcat được sử dụng để thu thập chẩn đoán trong quá trình chạy kiểm thử UI. Pipeline điển hình: xóa bộ đệm trước khi chạy kiểm thử, lưu kết xuất log như tạo phẩm xây dựng sau khi thực thi kiểm thử. Nếu kiểm thử thất bại, log có thể xác định liệu thất bại có phải do ANR, ngoại lệ không được xử lý hay hết thời gian chờ mạng.

Ghi log trong mã: Log.d, Log.e và Timber

Lớp android.util.Log — API tích hợp để ghi thông báo vào Logcat. Log.v, Log.d, Log.i, Log.w, Log.e và Log.wtf chấp nhận một thẻ (chuỗi) và một thông báo (chuỗi) hoặc thông báo + Throwable. Để định dạng thông báo, hãy sử dụng String.format hoặc mẫu chuỗi Kotlin — tránh nối chuỗi, tạo ra các đối tượng không cần thiết trong heap.

Thư viện Timber

Timber — thư viện phổ biến của Jake Wharton, khắc phục những thiếu sót của API Log tích hợp. Timber tự động chèn thẻ dựa trên tên lớp đã gọi ghi log và không yêu cầu truyền thẻ trong mỗi lần gọi. Timber cũng hỗ trợ ghi log có điều kiện: trong bản dựng Release, các lệnh gọi Timber.v và Timber.d có thể bị vô hiệu hóa bằng một dòng trong Application.onCreate.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // API Log tích hợp
        Log.d("MainActivity", "onCreate called")

        // Timber — thẻ tự động theo tên lớp
        Timber.d("onCreate called")
    }

    private fun loadData() {
        try {
            val result = fetchFromNetwork()
            Timber.i("Data loaded: $result")
        } catch (e: IOException) {
            Timber.e(e, "Failed to load data")
        }
    }
}

Ghi log có điều kiện cho Release

Trong bản dựng Release, nên tắt log VERBOSE và DEBUG để giảm tải cho bộ đệm Logcat và ngăn rò rỉ thông tin nhạy cảm. Timber giải quyết vấn đề này thông qua PlantingTree: trong phiên bản Debug, DebugTree được trồng (ghi mọi thứ), trong Release — CrashReportingTree (chỉ ghi ERROR qua Crashlytics). API Log tích hợp không hỗ trợ ghi log có điều kiện — nhà phát triển cần bọc mỗi lệnh gọi bằng if (BuildConfig.DEBUG).

Câu hỏi thường gặp

Cách xóa bộ đệm Logcat trước khi chạy kiểm thử

Sử dụng lệnh adb logcat -c trước khi chạy kiểm thử. Thay vào đó, trong Android Studio nhấn nút Clear Logcat (thùng rác) trong cửa sổ Logcat. Xóa không ảnh hưởng đến bộ đệm hệ thống của các tiến trình khác, chỉ ảnh hưởng đến kết nối hiện tại.

Cách tăng kích thước bộ đệm Logcat

Thực hiện adb logcat -G 2M để tăng bộ đệm lên 2 MB. Kích thước tối đa phụ thuộc vào thiết bị: trên Android 10+ có sẵn tới 16 MB. Thay đổi được giữ cho đến khi khởi động lại thiết bị. Để cấu hình vĩnh viễn, hãy sử dụng build.prop trong device tree.

Tại sao Logcat không hiển thị log của ứng dụng

Nguyên nhân có thể: ứng dụng đang chạy ở chế độ Release (log Timber.v/d bị tắt), bộ lọc Logcat ẩn mức cần thiết, hoặc bạn đã kết nối sai thiết bị. Cũng kiểm tra xem bạn đã chọn tiến trình của ứng dụng trong Android Studio chưa, không phải system_process.

Cách đọc log sự cố từ Logcat

Tìm dòng có FATAL EXCEPTION, bên dưới là stack trace đầy đủ. Dòng đầu tiên chứa loại ngoại lệ và thông báo, các dòng tiếp theo chứa chuỗi gọi với tệp và dòng mã. Sử dụng grep "FATAL EXCEPTION" để tìm nhanh trong tất cả các log.

ANR là gì và cách phát hiện nó trong Logcat

ANR (Application Not Responding) — tình huống khi luồng chính (UI thread) bị chặn hơn 5 giây. Trong Logcat, ANR xuất hiện dưới dạng thông báo có thẻ ActivityManager và văn bản "ANR in ..." với stack trace đính kèm của tất cả các luồng. Sử dụng bộ lọc tag:ActivityManager level:ERROR.

Tổng kết

  • Logcat — bộ đệm hệ thống Android có thể truy cập qua ADB và cửa sổ tích hợp của Android Studio
  • Sáu mức ghi log (VERBOSE — ASSERT) xác định tầm quan trọng và ngưỡng lọc của thông báo
  • Thẻ cho phép nhóm thông báo theo mô-đun ứng dụng để lọc nhanh
  • ADB logcat với grep/awk linh hoạt hơn giao diện GUI và phù hợp cho pipeline CI/CD
  • Timber đơn giản hóa ghi log, tự động chèn thẻ và tắt mức Debug trong Release
  • Log sự cố với ngoại lệ và stack trace tự động vào Logcat ở mỗi lần sự cố
  • Bộ lọc đã lưu trong Android Studio tăng tốc phân tích log hàng ngày

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.

Thảo luận dự án

Đọc thêm