Câu trả lời:
Logcollector là một lựa chọn tốt nhưng bạn cần cài đặt nó trước.
Khi tôi muốn nhận logfile để gửi qua thư, tôi thường làm như sau:
adb shell logcat > log.txt
adb
. Thường là trongC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
Tôi hy vọng mã này sẽ giúp được ai đó. Tôi mất 2 ngày để tìm ra cách đăng nhập từ thiết bị và sau đó lọc nó:
public File extractLogToFileAndWeb(){
//set a file
Date datum = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
String fullName = df.format(datum)+"appLog.log";
File file = new File (Environment.getExternalStorageDirectory(), fullName);
//clears a file
if(file.exists()){
file.delete();
}
//write log to file
int pid = android.os.Process.myPid();
try {
String command = String.format("logcat -d -v threadtime *:*");
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder result = new StringBuilder();
String currentLine = null;
while ((currentLine = reader.readLine()) != null) {
if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
result.append(currentLine);
result.append("\n");
}
}
FileWriter out = new FileWriter(file);
out.write(result.toString());
out.close();
//Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
//clear the log
try {
Runtime.getRuntime().exec("logcat -c");
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
return file;
}
như được chỉ ra bởi @mehdok
thêm quyền vào bảng kê khai để đọc nhật ký
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
Tôi sẽ sử dụng một cái gì đó thuộc loại này:
$adb logcat -d > logcat.txt
Tùy chọn -d sẽ chuyển toàn bộ bộ đệm tròn vào tệp văn bản và nếu bạn đang tìm kiếm một hành động / ý định cụ thể, hãy thử
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
Hi vọng điêu nay co ich :)
Đối với những người không quan tâm đến việc gỡ lỗi USB hoặc sử dụng, adb
có một giải pháp dễ dàng hơn. Trong Android 6 (Không chắc chắn về phiên bản trước), có một tùy chọn trong các công cụ dành cho nhà phát triển: Báo cáo lỗi
Nhấp vào tùy chọn này sẽ chuẩn bị báo cáo lỗi và nhắc bạn lưu nó vào ổ đĩa hoặc gửi nó qua email.
Tôi thấy đây là cách dễ nhất để lấy nhật ký. Tôi không muốn bật gỡ lỗi USB.
BIÊN TẬP:
Nhật ký nội bộ là một bộ đệm tròn trong bộ nhớ. Thực tế, có một vài bộ đệm tròn như vậy cho mỗi: radio, sự kiện, chính. Mặc định là chính.
Để có được một bản sao của bộ đệm, một kỹ thuật bao gồm thực hiện một lệnh trên thiết bị và lấy đầu ra dưới dạng một biến chuỗi.
SendLog là một ứng dụng mã nguồn mở thực hiện điều này: http://www.l6n.org/android/sendlog.shtml
Chìa khóa là chạy logcat
trên thiết bị trong HĐH nhúng. Nó không khó như âm thanh, chỉ cần kiểm tra ứng dụng nguồn mở trong liên kết.
Thường thì tôi nhận được lỗi " logcat read: Invalid argument
". Tôi đã phải xóa nhật ký, trước khi đọc từ nhật ký.
Tôi thích điều này:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Một cách đơn giản là tạo các phương thức thu thập nhật ký của riêng bạn hoặc thậm chí chỉ là một ứng dụng thu thập nhật ký hiện có từ thị trường.
Đối với các ứng dụng của mình, tôi đã tạo một chức năng báo cáo để gửi nhật ký đến email của mình (hoặc thậm chí đến một nơi khác - một khi bạn nhận được nhật ký, bạn có thể thực hiện cho dù bạn muốn với nó).
Dưới đây là một ví dụ đơn giản về cách lấy tệp nhật ký từ thiết bị:
Đơn giản chỉ cần chạy lệnh sau để có được đầu ra đến thiết bị đầu cuối của bạn:
adb shell logcat
Tôi biết đó là một câu hỏi cũ, nhưng tôi tin rằng vẫn còn hiệu lực ngay cả trong năm 2018.
Có một tùy chọn để báo cáo lỗi ẩn trong tùy chọn Nhà phát triển trong mọi thiết bị Android.
LƯU Ý: Điều này sẽ đổ toàn bộ nhật ký hệ thống
Làm thế nào để kích hoạt tùy chọn nhà phát triển? xem: https://developer.android.com/studio/debug/dev-options
Những gì làm việc cho tôi:
Làm thế nào để đọc điều này? mở bugreport-1960-01-01-hh-mm-ss.txt
bạn có thể muốn tìm kiếm một cái gì đó như thế này:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main
hoặc là:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Nhờ user1354692 tôi có thể làm cho nó dễ dàng hơn, chỉ với một dòng! người mà anh ấy đã bình luận:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
OnCreate
?
Tôi đã tạo một thư viện nhỏ (.aar) để lấy nhật ký qua email. Bạn có thể sử dụng nó với tài khoản Gmail. Nó khá đơn giản nhưng hoạt động. Bạn có thể lấy một bản sao từ đây
Trang web bằng tiếng Tây Ban Nha, nhưng có một bản PDF với phiên bản tiếng Anh của mô tả sản phẩm.
Tôi hy vọng nó có thể giúp đỡ.
Hai bước:
- Tạo nhật ký
- Tải Gmail để gửi nhật ký
.
Tạo nhật ký
File generateLog() {
File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder");
if (!logFolder.exists()) {
logFolder.mkdir();
}
String filename = "myapp_log_" + new Date().getTime() + ".log";
File logFile = new File(logFolder, filename);
try {
String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" };
Runtime.getRuntime().exec(cmd);
Toaster.shortDebug("Log generated to: " + filename);
return logFile;
}
catch (IOException ioEx) {
ioEx.printStackTrace();
}
return null;
}
Tải Gmail để gửi nhật ký
File logFile = generateLog();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile));
intent.setType("multipart/");
startActivity(intent);
Tài liệu tham khảo cho # 1
~ ~
Đối với # 2 - có rất nhiều câu trả lời khác nhau về cách tải tệp nhật ký để xem và gửi. Cuối cùng, giải pháp ở đây thực sự có hiệu quả với cả hai:
- tải Gmail dưới dạng tùy chọn
- đính kèm tập tin thành công
Xin chân thành cảm ơn https://stackoverflow.com/a/22367055/2162226 vì câu trả lời hoạt động chính xác
Trước tiên, hãy đảm bảo lệnh adb có thể được thực thi bằng cách đặt PATH cho các công cụ nền tảng sdk của Android:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
sau đó chạy:
adb shell logcat > log.txt
HOẶC di chuyển đầu tiên đến công cụ nền tảng adb:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
sau đó chạy
./adb shell logcat > log.txt