ฉันต้องการดึงไฟล์บันทึกจากอุปกรณ์ไปยังพีซีของฉัน ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันต้องการดึงไฟล์บันทึกจากอุปกรณ์ไปยังพีซีของฉัน ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
Logcollectorเป็นตัวเลือกที่ดี แต่คุณต้องติดตั้งก่อน
เมื่อฉันต้องการให้ logfile ส่งทางไปรษณีย์ฉันมักจะทำสิ่งต่อไปนี้:
adb shell logcat > log.txtadbตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีที่เหมาะสมในการทำงาน โดยปกติในC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
ฉันหวังว่ารหัสนี้จะช่วยให้ใครบางคน ฉันใช้เวลา 2 วันเพื่อหาวิธีการล็อกจากอุปกรณ์แล้วกรอง:
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;
}
ตามที่ @mehdok ชี้
เพิ่มสิทธิ์ในรายการสำหรับการอ่านบันทึก
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
ฉันจะใช้สิ่งนี้ประเภท:
$adb logcat -d > logcat.txt
ตัวเลือก -d ดัมพ์บัฟเฟอร์วงกลมทั้งหมดลงในไฟล์ข้อความและหากคุณกำลังมองหาการดำเนินการ / ความพยายามโดยเฉพาะ
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
หวังว่าจะช่วย :)
สำหรับผู้ที่ไม่สนใจการดีบัก USB หรือใช้งานadbจะมีวิธีแก้ไขที่ง่ายกว่า ใน Android 6 (ไม่แน่ใจเกี่ยวกับรุ่นก่อนหน้า) มีตัวเลือกภายใต้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์: ใช้รายงานข้อผิดพลาด
การคลิกตัวเลือกนี้จะจัดทำรายงานข้อผิดพลาดและแจ้งให้คุณบันทึกลงในไดรฟ์หรือส่งมาทางอีเมล
ฉันพบว่านี่เป็นวิธีที่ง่ายที่สุดในการรับบันทึก ฉันไม่ชอบเปิดการดีบัก USB
แก้ไข:
บันทึกภายในคือบัฟเฟอร์แบบวงกลมในหน่วยความจำ จริงๆแล้วมีบัฟเฟอร์วงกลมสองสามตัวสำหรับวิทยุกิจกรรมหลัก ค่าเริ่มต้นคือหลัก
ในการรับสำเนาของบัฟเฟอร์หนึ่งเทคนิคเกี่ยวข้องกับการดำเนินการคำสั่งบนอุปกรณ์และรับเอาท์พุทเป็นตัวแปรสตริง
SendLog เป็นแอปโอเพนซอร์ซซึ่งทำได้เพียงแค่นี้: http://www.l6n.org/android/sendlog.shtml
กุญแจสำคัญคือการทำงานlogcatบนอุปกรณ์ในระบบปฏิบัติการฝังตัว มันไม่ยากอย่างที่คิดฟังแค่ไปที่แอพโอเพนซอร์สในลิงค์
ฉันมักจะได้รับข้อผิดพลาด " logcat read: Invalid argument" ฉันต้องล้างบันทึกก่อนอ่านจากบันทึก
ฉันทำสิ่งนี้:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
วิธีง่ายๆคือการสร้างวิธีการเก็บบันทึกของคุณเองหรือแม้กระทั่งเพียงแค่แอปบันทึกที่มีอยู่จากตลาด
สำหรับแอพของฉันฉันได้สร้างฟังก์ชั่นรายงานซึ่งจะส่งบันทึกไปยังอีเมลของฉัน (หรือแม้แต่ที่อื่น - เมื่อคุณได้รับบันทึกแล้วคุณสามารถทำได้ไม่ว่าคุณจะต้องการ)
นี่คือตัวอย่างง่ายๆเกี่ยวกับวิธีรับไฟล์บันทึกจากอุปกรณ์:
ง่าย ๆ แค่รันคำสั่งต่อไปนี้เพื่อรับเอาต์พุตไปยังเทอร์มินัลของคุณ:
adb shell logcat
ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันเชื่อว่ายังใช้ได้แม้กระทั่งในปี 2018
มีตัวเลือกในการใช้รายงานข้อผิดพลาดที่ซ่อนอยู่ในตัวเลือกนักพัฒนาในทุกอุปกรณ์ Android
หมายเหตุ: นี่จะดัมพ์บันทึกของระบบทั้งหมด
วิธีเปิดใช้งานตัวเลือกนักพัฒนาซอฟต์แวร์ ดู: https://developer.android.com/studio/debug/dev-options
อะไรที่เหมาะกับฉัน:
วิธีการอ่านนี้ open bugreport-1960-01-01-hh-mm-ss.txt
คุณอาจต้องการมองหาสิ่งนี้:
------ 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
หรือ:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
ขอบคุณ user1354692 ฉันสามารถทำให้มันง่ายขึ้นด้วยบรรทัดเดียวเท่านั้น! คนที่เขาแสดงความคิดเห็น:
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?
ฉันได้สร้างห้องสมุดขนาดเล็ก (.aar) เพื่อดึงบันทึกทางอีเมล คุณสามารถใช้กับบัญชี Gmail มันค่อนข้างง่าย แต่ใช้งานได้ คุณสามารถรับสำเนาได้จากที่นี่
เว็บไซต์เป็นภาษาสเปน แต่มี PDF พร้อมคำอธิบายผลิตภัณฑ์เวอร์ชันภาษาอังกฤษ
ฉันหวังว่ามันจะช่วยได้
สองขั้นตอน:
- สร้างบันทึก
- โหลด Gmail เพื่อส่งบันทึก
.
สร้างบันทึก
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;
}โหลด Gmail เพื่อส่งบันทึก
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);การอ้างอิงสำหรับ # 1
~~
สำหรับ # 2 - มีคำตอบต่าง ๆ มากมายสำหรับวิธีการโหลดไฟล์บันทึกเพื่อดูและส่ง ในที่สุดโซลูชันที่นี่ใช้งานได้จริงกับทั้งสอง:
- โหลด Gmail เป็นตัวเลือก
- แนบไฟล์สำเร็จ
ขอบคุณมากที่https://stackoverflow.com/a/22367055/2162226สำหรับคำตอบที่ถูกต้อง
ก่อนอื่นตรวจสอบให้แน่ใจว่าคำสั่ง adb นั้นสามารถเรียกใช้งานได้โดยการตั้งค่า PATH เป็น android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
จากนั้นเรียกใช้:
adb shell logcat > log.txt
หรือย้ายไปที่เครื่องมือแพลตฟอร์ม adb ก่อน:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
จากนั้นเรียกใช้
./adb shell logcat > log.txt