package pl.brightinventions.slf4android; import android.content.Context; import android.os.AsyncTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; class ReadLogcatEntriesAsyncTask extends AsyncTask<Context, Void, File> { private static final Logger LOG = LoggerFactory.getLogger(ReadLogcatEntriesAsyncTask.class.getSimpleName()); private static LogcatReadingConfiguration LogcatReadingConfig; @Override protected File doInBackground(Context... params) { if (params == null || params.length == 0 || params[0] == null) { LOG.warn("Wrong arguments passed to read logcat entries"); return null; } Context ctx = params[0]; try { File tempFile = File.createTempFile("logcat", ".log", ctx.getExternalCacheDir()); String fullPath = tempFile.getAbsolutePath(); String readLogcatCommand = String.format("logcat -v time -d -f %s", fullPath); Runtime runtime = Runtime.getRuntime(); try { Process process = runtime.exec(readLogcatCommand); int exitCode = process.waitFor(); if (exitCode != 0) { LOG.warn("Command {} returned with code {}", readLogcatCommand, exitCode); } else { LOG.info("Dumped logcat entries to {} with size {} KB", fullPath, tempFile.length() / 1024); if (getConfiguration().shouldClear()) { LOG.info("Will now clear logcat entries"); runtime.exec("logcat -c"); } } } catch (IOException | InterruptedException e) { LOG.warn("Error dumping logcat entries to {}", fullPath, e); } return tempFile; } catch (IOException e) { LOG.warn("Error creating temp file, did you enable write permissions?", e); return null; } } public static synchronized LogcatReadingConfiguration getConfiguration() { if(LogcatReadingConfig == null){ LogcatReadingConfig = new LogcatReadingConfiguration(); } return LogcatReadingConfig; } }