2013-05-28 28 views
7

Sau Where are Android logcat files stored? Tôi biết rằng logcat được lưu dưới dạng bộ đệm vòng bên trong hạt nhân, có kích thước 256kb. Các ứng dụng sử dụng một API đặc biệt để yêu cầu hạt nhân lưu nhật ký.Thông báo logcat được lưu như thế nào

Nhật ký thiết bị của tôi lớn hơn toyyyyy. Tôi biết điều này bởi vì khi tôi adb logcat > adblogcat.txt tôi nhận được một tập tin thực sự lớn. Điều này ngụ ý rằng "cái gì đó" xóa bộ đệm hạt nhân và lưu trữ chúng trong hệ thống tệp (?) Và adb logcat đọc từ tệp lớn hơn này.

Bất cứ ai có thể giải thích cách hoạt động của tính năng này? Tôi đang xem xét https://github.com/cgjones/android-system-core/blob/master/logcat/logcat.cpp và tôi không thể hiểu chi tiết chính xác.

Điểm thưởng cho người giải thích những gì xảy ra khi khởi động lại, nhật ký có được lưu giữa các lần khởi động lại không?

Trả lời

9

Đây là hiểu biết của tôi về logcat, có thể có một số sai lầm, hoan nghênh bất kỳ nhận xét nào:

  1. Về log file trong điện thoại: Từ frameworks/base/core/jni/android_util_Log.cpp chúng ta có thể thấy tất cả các bản ghi sẽ được ghi vào /dev/log/ thư mục trong thiết bị của bạn theo mặc định. chính sẽ được ghi vào /dev/log/main radio sẽ được ghi thành /dev/log/radio ... vì tất cả là các tệp I/O của hệ điều hành. Vì vậy, sẽ bị xóa khi điện thoại được khởi động lại. Và những kích thước tập tin có một số giới hạn, nếu kích thước đạt đến giới hạn, nhật ký cũ sẽ bị ghi đè.

  2. Giới thiệu về Logcat: Logcat là công cụ để đọc hoặc xuất lại các tệp nhật ký. Nó được cài đặt trong hệ thống/bin/thư mục trong điện thoại. Tôi không đọc từng mã số của logcat.cpp; nhưng tôi có thể nói ứng dụng logcat sẽ đọc tệp nhật ký trong hệ thống/logcat/main theo mặc định và xuất chúng trong màn hình hoặc tệp dựa trên các tham số bạn sử dụng.

  3. Về cách nhật ký được tạo: Nếu bạn thấy mã nguồn của android.util.log, bạn có thể tìm thấy tất cả log.d/log.e sẽ sử dụng phương pháp JNI để ghi nhật ký vào tệp nhật ký như đã đề cập ở trên.

    public static native int println_native(int bufID,int priority, String tag, String msg);

    Bạn có thể tìm ra phương pháp JNI here. Nếu bạn quan tâm đến nó, bạn có thể đọc mã nguồn để tìm những gì nó đang làm ở đó.

  4. Lưu logcat vào tệp cụ thể bạn muốn: Dựa trên Log I/O, nhà phát triển có thể viết ứng dụng để lưu nhật ký vào tệp trong thẻ SD trong điện thoại để chúng tôi có thể giữ nhiều nhật ký hơn hoặc tệp nhật ký lớn hơn. Phương pháp đơn giản nhất là sử dụng Runtime.exec() để thực thi ứng dụng logcat: Bạn có thể giám sát bộ thu BOOT hoàn thành để bắt đầu lệnh logcat để đọc nhật ký của logcat vào các tệp của riêng bạn.

Ví dụ:

String cmd = "logcat -v time -f yourown.file" 
Process process = Runtime.getRuntime().exec(cmd); 
+1

Về 4, tôi sẽ làm điều này trong init.rc, như một kịch bản bắt đầu lúc khởi động. – elcuco

+0

Có, tôi đoán nó có thể hoạt động. như thế này: 'dịch vụ goldfish-logcat/system/bin/logcat >> yourfileonsdcard oneshot' nó là một kịch bản cho trình giả lập. – buptcoder

+0

@buptcoder Cảm ơn bạn đã có cái nhìn tổng quan tuyệt vời. Tôi đã tìm kiếm điều này trong tài liệu Android và không thể tìm thấy nó! – Alan

Các vấn đề liên quan