2011-10-30 11 views
11

Khi tôi viết một trình bao bọc nhật ký cho ứng dụng Android của mình, tôi nhận thấy một hành vi kỳ lạ của phương thức Log.isLoggable của android. Thực thi mã sau:Log.isLoggable có trả về giá trị sai không?

final String TAG = "Test"; 
Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE)); 
Log.d(TAG, "debug is active: " + Log.isLoggable(TAG, Log.DEBUG)); 
Log.i(TAG, "info is active: " + Log.isLoggable(TAG, Log.INFO)); 
Log.w(TAG, "warn is active: " + Log.isLoggable(TAG, Log.WARN)); 
Log.e(TAG, "error is active: " + Log.isLoggable(TAG, Log.ERROR)); 

sản xuất sau đầu ra LogCat:

VERBOSE/Test(598): verbose is active: false 
DEBUG/Test(598): debug is active: false 
INFO/Test(598): info is active: true 
WARN/Test(598): warn is active: true 
ERROR/Test(598): error is active: true 

Tại sao tôi nhận verbose và gỡ lỗi không hoạt động mặc dù tôi tạo ra những kết quả đầu ra sử dụng tiết và gỡ lỗi đăng nhập?

Trả lời

6

Tất cả cấp độ nhật ký được ghi vào logcat bất kể mức nhật ký hiện tại là gì. Phương pháp isLogabble() có thể được sử dụng làm tối ưu hóa cho các ứng dụng của bạn để ngăn việc gửi các báo cáo nhật ký không cần thiết đến logcat. Bạn cũng có thể sử dụng lệnh adb logcat để lọc một tập con của các mức ghi nhật ký ngay cả khi quá trình ghi nhật ký được đặt thành tiết (xem https://developer.android.com/studio/debug/am-logcat.html).

+0

Liên kết bị hỏng, Vui lòng cập nhật liên kết. –

2

Bạn nên sử dụng

if (Log.isLoggable(TAG, Log.VERBOSE)) { 
    Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE)); 
} 
12

Nếu bạn đọc những thông tin về Log.isLoggable(), bạn sẽ nhận thấy rằng mức độ khai thác gỗ mặc định là INFO. Mọi thứ ít hơn (DEBUGVERBOSE) sẽ khiến phương thức này trả về false. Đây là lý do tại sao kết quả đầu ra của bạn hiển thị hai số này là false.

Tất cả các cuộc gọi Log.* được ghi vào nhật ký. Gọi Log.isLoggable() chỉ đơn giản là một cách để bạn có thể điều chỉnh khai thác gỗ. Nó không cần thiết. Thông thường, bạn sẽ gọi số Log.isLoggable() trước cuộc gọi Log.* thực tế để xác định xem có đăng nhập hay không.

Bạn có thể điều chỉnh khai thác gỗ của bạn mỗi TAG nếu bạn chọn, hoặc là với một tập tin prop hoặc thông qua adb. Những điều tốt đẹp về việc này là bạn có thể tự động chuyển sang đăng lên/xuống/tắt cho mỗi cá nhân TAG trong ứng dụng của bạn mà không cần bằng tay cho ý kiến ​​ra dòng Log, hoặc thực hiện kiểm tra của riêng bạn.

0

LOG sẽ luôn được in trong logcat cho dù Log.isloggable() trả về gì.