Я хочу сбросить logcat Android в файл всякий раз, когда пользователь хочет собирать журналы. Через инструменты adb мы можем перенаправить журналы в файл с помощью adb logcat -f filename
, но как это сделать программно?
Запись данных регистратора android в файл
Ответ 1
Вот пример чтения журналов.
Вы можете изменить это для записи в файл вместо TextView
.
Требуется разрешение в AndroidManifest
:
<uses-permission android:name="android.permission.READ_LOGS" />
код:
public class LogTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(log.toString());
} catch (IOException e) {
}
}
}
Ответ 2
Logcat может писать непосредственно в файл:
public static void saveLogcatToFile(Context context) {
String fileName = "logcat_"+System.currentTimeMillis()+".txt";
File outputFile = new File(context.getExternalCacheDir(),fileName);
@SuppressWarnings("unused")
Process process = Runtime.getRuntime().exec("logcat -f "+outputFile.getAbsolutePath());
}
Дополнительная информация о logcat: см. http://developer.android.com/tools/debugging/debugging-log.html
Ответ 3
Или вы можете попробовать этот вариант
try {
final File path = new File(
Environment.getExternalStorageDirectory(), "DBO_logs5");
if (!path.exists()) {
path.mkdir();
}
Runtime.getRuntime().exec(
"logcat -d -f " + path + File.separator
+ "dbo_logcat"
+ ".txt");
} catch (IOException e) {
e.printStackTrace();
}
Ответ 4
public static void writeLogToFile(Context context) {
String fileName = "logcat.txt";
File file= new File(context.getExternalCacheDir(),fileName);
if(!file.exists())
file.createNewFile();
String command = "logcat -f "+file.getAbsolutePath();
Runtime.getRuntime().exec(command);
}
Вышеуказанный метод будет записывать все записи в файл. Также добавьте ниже разрешения в файл манифеста
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />