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.
- 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.
- 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 (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.
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 (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 (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.
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ị.
Truy vấn nhật ký bằng lượt tìm kiếm khoá-giá-trị
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.
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ườngtag
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
, message
và line
.
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ử AND
và OR
được biểu thị bằng &
và |
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
, ERROR
và ASSERT
.
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
,h
vàd
(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 (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.
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 ENDED
và PROCESS 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.
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.