Yanıtlar:
Logcollector iyi bir seçenektir, ancak önce onu yüklemeniz gerekir.
Günlük dosyasının postayla gönderilmesini istediğimde, genellikle şunları yapıyorum:
adb shell logcat > log.txtadb. Genellikle içindeC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
Umarım bu kod birine yardımcı olur. Cihazdan nasıl oturum açacağımı ve ardından filtrelemem 2 günümü aldı:
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 tarafından işaret edildiği gibi
günlükleri okumak için bildirime izin ekleyin
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
USB hata ayıklama veya kullanmakla ilgilenmeyenler adbiçin daha kolay bir çözüm var. Android 6'da (Önceki sürümden emin değilim) geliştirici araçlarının altında bir seçenek vardır: Hata Raporu Al
Bu seçeneğin tıklanması bir hata raporu hazırlayacak ve onu sürücüye kaydetmenizi veya e-posta ile göndermenizi isteyecektir.
Bunu günlükleri almanın en kolay yolu olarak buldum. USB hata ayıklamasını açmayı sevmiyorum.
DÜZENLE:
Dahili günlük, bellekte dairesel bir tampondur. Aslında her biri için bu tür birkaç dairesel tampon vardır: radyo, olaylar, ana. Varsayılan, main'dir.
Bir tamponun bir kopyasını elde etmek için, bir teknik, cihazda bir komutun çalıştırılmasını ve çıktının bir dizi değişkeni olarak elde edilmesini içerir.
SendLog tam da bunu yapan açık kaynaklı bir uygulamadır: http://www.l6n.org/android/sendlog.shtml
Anahtar, logcatgömülü işletim sistemindeki cihazda çalışmaktır . Göründüğü kadar zor değil, bağlantıdaki açık kaynak uygulamasına bakın.
Genellikle " logcat read: Invalid argument" hatasını alıyorum . Günlükten okumadan önce günlüğü temizlemem gerekiyordu.
Bunu beğendim:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Basit bir yol, kendi günlük toplayıcı yöntemlerinizi veya hatta piyasadaki mevcut bir günlük toplayıcı uygulamasını yapmaktır.
Uygulamalarım için, günlükleri e-postama (veya hatta başka bir yere - günlüğü aldıktan sonra dilediğiniz gibi yapabilirsiniz) gönderen bir rapor işlevi yaptım.
Günlük dosyasının bir cihazdan nasıl alınacağına dair basit bir örnek:
Basitçe çıktıyı terminalinize almak için aşağıdaki komutu çalıştırın:
adb shell logcat
Bunun eski bir soru olduğunu biliyorum, ancak 2018'de bile geçerli olduğuna inanıyorum.
İçin bir seçenek vardır bir hata raporu al gizli Geliştirici seçenekleri her robot cihaz.
NOT: Bu, tüm sistem günlüğünü döker
Geliştirici seçenekleri nasıl etkinleştirilir? bkz: https://developer.android.com/studio/debug/dev-options
Benim için ne işe yarar:
bunu nasıl okuyabilirim? açık bugreport-1960-01-01-hh-mm-ss.txt
muhtemelen bunun gibi bir şey aramak istersiniz:
------ 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
veya:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
User1354692 sayesinde tek hatla daha da kolaylaştırabildim! yorum yaptığı kişi:
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?
Günlükleri e-posta ile almak için küçük bir kitaplık (.aar) oluşturdum. Gmail hesaplarıyla kullanabilirsiniz. Oldukça basit ama işe yarıyor. Buradan bir kopyasını alabilirsiniz
Site İspanyolcadır, ancak ürün açıklamasının İngilizce versiyonunun bulunduğu bir PDF dosyası vardır.
Umarım yardımcı olabilir.
İki adım:
- Günlüğü oluştur
- Günlüğü göndermek için Gmail'i yükleyin
.
Günlüğü oluştur
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;
}Günlüğü göndermek için Gmail'i yükleyin
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 için referanslar
~~
# 2 için - günlük dosyasını görüntülemek ve göndermek için nasıl yükleneceğine dair birçok farklı yanıt var. Son olarak, buradaki çözüm aslında her ikisinde de işe yaradı:
- Gmail'i bir seçenek olarak yükle
- dosyayı başarıyla ekler
Doğru çalışan cevap için https://stackoverflow.com/a/22367055/2162226'ya çok teşekkürler
Öncelikle PATH'i android sdk platform araçlarına ayarlayarak adb komutunun çalıştırılabilir olduğundan emin olun:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
o zaman koş:
adb shell logcat > log.txt
VEYA önce adb platform araçlarına geçin:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
o zaman koş
./adb shell logcat > log.txt