Xem nhật ký bằng Logcat

Cửa sổ Logcat trong Android Studio giúp bạn gỡ lỗi ứng dụng bằng cách hiển thị nhật ký từ thiết bị theo thời gian thực – ví dụ: các thông điệp mà bạn đã thêm vào ứng dụng bằng lớp Log, thông điệp từ các dịch vụ chạy trên Android hoặc thông điệp của hệ thống, chẳng hạn như khi bộ thu gom rác (garbage collector) hoạt động. Khi ứng dụng trả về một ngoại lệ, Logcat sẽ hiện một thông điệp, theo sau là dấu vết ngăn xếp liên quan, trong đó có chứa các đường liên kết đến dòng mã.

Làm quen với cửa sổ Logcat

Để xem thông điệp nhật ký cho ứng dụng, hãy làm như sau.

  1. Trong Android Studio, hãy tạo và chạy ứng dụng trên một thiết bị thực hoặc trình mô phỏng.
  2. Chọn View > Tool Windows > Logcat (Xem > Cửa sổ công cụ > Logcat) trên thanh trình đơn.

Theo mặc định, Logcat sẽ cuộn xuống dưới cùng. Nhấp vào khung hiển thị Logcat hoặc di chuyển lên bằng con lăn chuột sẽ tắt tính năng này. Để bật lại tính năng này, hãy nhấp vào biểu tượng Scroll to the End Biểu tượng Scroll to End (Cuộn xuống dưới cùng) (Cuộn xuống dưới cùng) trên thanh công cụ. Bạn cũng có thể sử dụng thanh công cụ để xoá, tạm dừng hoặc khởi động lại Logcat.

Giao diện người dùng cửa sổ Logcat

Hình 1. Logcat định dạng nhật ký để có thể dễ dàng quét thông tin hữu ích, chẳng hạn như thẻ và nội dung thông điệp, đồng thời xác định nhiều loại nhật ký, chẳng hạn như cảnh báo và lỗi.

Cách đọc nhật ký

Mỗi nhật ký có một ngày, dấu thời gian, mã quy trình và mã luồng, thẻ, tên gói, mức độ ưu tiên và thông điệp liên kết với nhật ký đó. Các thẻ khác nhau có một màu riêng biệt giúp xác định loại nhật ký. Mỗi mục nhập nhật ký có mức độ ưu tiên là FATAL, ERROR, WARNING, INFO, DEBUG hoặc VERBOSE.

Ví dụ: thông điệp nhật ký sau đây có mức độ ưu tiên là DEBUG và thẻ ProfileInstaller:

2022-12-29 04:00:18.823 30249-30321 ProfileInstaller        com.google.samples.apps.sunflower    D  Installing profile for com.google.samples.apps.sunflower

Định cấu hình khung hiển thị nhật ký

Khung hiển thị nhật ký chuẩn cho biết ngày, mã quy trình thời gian và mã luồng, thẻ, tên gói, mức độ ưu tiên của từng nhật ký và thông điệp liên quan với mỗi nhật ký đó. Theo mặc định, các dòng nội dung không được ngắt dòng trong khung hiển thị nhật ký nhưng bạn có thể sử dụng tuỳ chọn Soft-Wrap Biểu tượng Soft-Wrap (Ngắt dòng mềm) (Ngắt dòng mềm) trên thanh công cụ Logcat.

Bạn có thể chuyển sang khung hiển thị Compact (Thu gọn), có ít thông tin hiển thị mặc định hơn, bằng cách nhấp vào Configure Logcat Format Options (Định cấu hình các tuỳ chọn định dạng Logcat) trên thanh công cụ Logcat.

Để định cấu hình thông tin bạn muốn hiển thị một cách chi tiết hơn, hãy chọn Modify Views (Sửa đổi khung hiển thị) rồi chọn xem bạn muốn hiển thị dấu thời gian, thẻ, mã quy trình hay tên gói.

Thay đổi bảng phối màu

Để thay đổi bảng phối màu, hãy chuyển đến Android Studio > Settings > Editor > Color Scheme (Android Studio > Cài đặt > Trình chỉnh sửa > Bảng phối màu). Để thay đổi bảng phối màu của khung hiển thị nhật ký, hãy chọn Android Logcat. Để thay đổi bảng phối màu của bộ lọc, hãy chọn Logcat Filter (Bộ lọc Logcat).

Các lựa chọn khác về cấu hình

Để xem các lựa chọn khác về cấu hình, hãy chuyển đến Android Studio > Settings > Tools > Logcat (Android Studio > Cài đặt > Công cụ > Logcat). Tại đó, bạn có thể chọn kích thước vùng đệm chu kỳ Logcat, bộ lọc mặc định cho cửa sổ Logcat mới, cũng như liệu bạn có muốn thêm bộ lọc từ nhật ký vào tính năng tự động hoàn thành hay không.

Sử dụng Logcat trong nhiều cửa sổ

Các thẻ giúp bạn dễ dàng chuyển đổi giữa các thiết bị hoặc truy vấn. Bạn có thể tạo nhiều thẻ Logcat bằng cách nhấp vào New Tab Biểu tượng New Tab (Thẻ mới) (Thẻ mới). Bạn có thể đổi tên và sắp xếp lại thẻ bằng cách nhấp chuột phải vào thẻ đó.

Ngoài ra, bạn có thể phân tách khung hiển thị trong một thẻ để dễ dàng so sánh hai nhóm nhật ký. Để tạo phần phân tách, hãy nhấp chuột phải vào khung hiển thị nhật ký hoặc nhấp vào tuỳ chọn Split Panels (Phân tách bảng điều khiển) trên thanh công cụ rồi chọn Split Right (Phân tách sang phải) hoặc Split Down (Phân tách xuống dưới). Để đóng phần phân tách, hãy nhấp chuột phải rồi chọn Close (Đóng). Bạn có thể thiết lập kết nối thiết bị, tuỳ chọn chế độ xem và truy vấn riêng cho mỗi phần đã tách.

Nhiều cửa sổ Logcat Hình 2. Chia tách các cửa sổ Logcat trong Android Studio.

Trên thanh công cụ Logcat, bạn có thể cuộn đến cuối nhật ký hoặc nhấp vào một dòng cụ thể để giữ cho dòng đó hiển thị.

Trong Android Studio, bạn có thể tạo các lượt tìm kiếm khoá-giá-trị ngay từ trường truy vấn chính. Hệ thống truy vấn này cung cấp kết quả chính xác về nội dung bạn muốn truy vấn và cũng loại trừ các nhật ký dựa trên khoá-giá-trị. Mặc dù có thể sử dụng biểu thức chính quy, bạn không nhất thiết phải dựa vào các biểu thức đó để truy vấn. Để xem các truy vấn được đề xuất, hãy nhấn tổ hợp phím Ctrl + Space trong trường truy vấn.

Danh sách các truy vấn được đề xuất trong trường truy vấn Hình 3. Nhấn tổ hợp phím Ctrl + Space trong trường truy vấn để xem danh sách các truy vấn được đề xuất.

Sau đây là một số ví dụ về khoá bạn có thể sử dụng trong truy vấn:

  • tag: So khớp với trường tag của mục nhập nhật ký.
  • package: So khớp với tên gói của ứng dụng ghi nhật ký.
  • process: So khớp với tên quy trình của ứng dụng ghi nhật ký.
  • message: So khớp với phần thông điệp của mục nhập nhật ký.
  • level: So khớp với cấp độ nhật ký được chỉ định hoặc có mức độ nghiêm trọng cao hơn – ví dụ: DEBUG.
  • age: So khớp xem mục nhập có dấu thời gian gần đây không. Giá trị được chỉ định dưới dạng số, theo sau là chữ cái chỉ định đơn vị thời gian: s cho giây, m cho phút, h cho giờ và d cho ngày. Ví dụ: age: 5m chỉ lọc các thông điệp được ghi lại trong 5 phút qua.

Dạng phủ định và biểu thức chính quy

Các trường sau đây hỗ trợ so khớp biểu thức chính quy và dạng phủ định: tag, package, messageline.

Dạng phủ định được biểu thị bằng cách đặt tiền tố - trong tên trường. Ví dụ: -tag:MyTag khớp với các mục nhập nhật ký có tag không chứa chuỗi MyTag.

Việc so khớp biểu thức chính quy được biểu thị bằng cách thêm ~ vào tên trường. Ví dụ: tag~:My.*Tag.

Bạn có thể kết hợp ký tự bổ trợ biểu thức chính quy và dạng phủ định với nhau. Ví dụ: -tag~:My.*Tag.

Toán tử logic và dấu ngoặc đơn

Ngôn ngữ truy vấn hỗ trợ các toán tử ANDOR được biểu thị bằng &| và dấu ngoặc đơn. Ví dụ:

(tag:foo | level:ERROR) & package:mine

Xin lưu ý rằng mức độ ưu tiên thông thường của toán tử sẽ được áp dụng tại đây, vì vậy, lượt truy vấn sau:

tag:foo | level:ERROR & package:mine

Sẽ được hiểu là:

tag:foo | (level:ERROR & package:mine)

Toán tử logic ngầm

Nếu không áp dụng các toán tử logic, ngôn ngữ truy vấn sẽ tự động đánh giá nhiều từ khoá bộ lọc key-value không phủ định bằng cùng một khoá là OR và mọi từ khoá khác với AND.

Ví dụ:

tag:foo tag:bar package:myapp

Sẽ được hiểu là:

(tag:foo | tag:bar) & package:myapp

Nhưng:

tag:foo -tag:bar package:myapp

Sẽ được hiểu là:

tag:foo & -tag:bar & package:myapp

Nếu nhiều từ khoá truy vấn được phân tách bằng khoảng trắng mà không có toán tử logic, chúng sẽ được coi là AND với mức độ ưu tiên thấp. Ví dụ: từ khoá foo bar tag:bar1 | tag:bar2 tương đương với 'foo bar' & (tag: bar1 | tag: bar2).

Truy vấn đặc biệt

package:mine

Khoá gói hỗ trợ giá trị đặc biệt mine. Giá trị đặc biệt này khớp với mọi tên gói có trong dự án mở.

level

Truy vấn level khớp với cấp độ nhật ký của thông điệp Logcat, trong đó cấp độ của mục nhập nhật ký sẽ lớn hơn hoặc bằng cấp độ truy vấn.

Ví dụ: level:INFO khớp với mọi mục nhật ký có cấp độ nhật ký là INFO, WARN, ERROR hoặc ASSERT. Cấp độ này không phân biệt chữ hoa chữ thường. Các cấp độ hợp lệ là: VERBOSE, DEBUG, INFO, WARN, ERRORASSERT.

age

Truy vấn age khớp với các mục nhập dựa trên dấu thời gian và được định dạng là age:<number><unit>, trong đó

  • <number> là một số nguyên
  • <unit> có giá trị s, m, hd (giây, phút, giờ và ngày).

Với danh sách sau, truy vấn age so khớp với các thông điệp nhật ký có dấu thời gian trong phạm vi được mô tả bằng giá trị. Ví dụ: truy vấn age:5m khớp với các mục nhập có dấu thời gian không quá 5 phút trước.

age:30s
age:5m
age:3h
age:1d

Xin lưu ý rằng dấu thời gian được so sánh với dấu thời gian của máy chủ lưu trữ, chứ không phải của thiết bị đã kết nối. Nếu thời gian của thiết bị không được đặt chính xác, truy vấn này có thể không hoạt động như mong đợi.

Khoá is

Bạn có thể sử dụng khoá is như sau:

  • is:crash khớp với các mục nhập nhật ký đại diện cho sự cố của ứng dụng (ứng dụng gốc hoặc Java).
  • is:stacktrace khớp với các mục nhập nhật ký đại diện cho bất kỳ nội dung nào trông giống như một dấu vết ngăn xếp Java, bất kể nhật ký thuộc cấp độ nào.

Khoá name

Khoá name cho phép bạn cung cấp tên riêng biệt cho một bộ lọc đã lưu để có thể dễ dàng nhận dạng bộ lọc trong trình đơn thả xuống nhật ký bộ lọc. Mặc dù bạn không gặp lỗi khi chỉ định name nhiều lần, IDE chỉ sử dụng giá trị gần nhất được chỉ định cho name trong truy vấn.

Xem nhật ký truy vấn

Bạn có thể xem lịch sử truy vấn của mình bằng cách nhấp vào Show history Biểu tượng Filter (Bộ lọc) (Hiển thị nhật ký) bên cạnh trường truy vấn. Để đưa một truy vấn vào danh sách yêu thích sao cho truy vấn đó nằm ở đầu danh sách trong tất cả các dự án Studio, hãy nhấp vào dấu sao bên cạnh truy vấn đó. Bạn cũng có thể sử dụng khoá name: để giúp các truy vấn yêu thích dễ nhận ra hơn. Để biết thêm thông tin, hãy xem phần Truy vấn đặc biệt.

Giao diện người dùng để thêm truy vấn vào danh sách yêu thích

Hình 4. Thêm truy vấn vào danh sách yêu thích bằng cách nhấp vào dấu sao bên cạnh truy vấn đó.

Theo dõi nhật ký trong những lần xảy ra sự cố và ứng dụng khởi động lại

Khi nhận thấy quy trình ứng dụng của bạn đã dừng và khởi động lại, Logcat sẽ hiển thị một thông điệp trong đầu ra, chẳng hạn như PROCESS ENDEDPROCESS STARTED. Việc khởi động lại Logcat sẽ giữ lại cấu hình phiên, chẳng hạn như các phần phân tách thẻ, bộ lọc và các chế độ xem để bạn có thể dễ dàng tiếp tục phiên của mình.

Cửa sổ Logcat cho các sự cố ứng dụng

Hình 5. Khi quy trình ứng dụng của bạn khởi động lại, Logcat sẽ in một thông điệp cho biết quy trình đã kết thúc rồi bắt đầu lại.