Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving Logcat to a text file in Android Device

I had found some crashes while running the application in android device, which is not showing in emulator. So i need to save the Logcat in a text file in my device's memory or SD card. Could you please suggest me good method to do this?

like image 318
Nithin Michael Avatar asked Oct 24 '13 12:10

Nithin Michael


People also ask

Where are Logcat files stored?

They are stored as circular memory buffers on the device. If you run "adb logcat > myfile" on your host system, you can retrieve the content into a file.

How do I print a log message on Android?

Print : Click to print the logcat messages. After selecting your print preferences in the dialog that appears, you can also choose to save to a PDF. Restart : Click to clear the log and restart logcat.


2 Answers

Use an Application class at the beginning of your app. That allows a proper file and log handling.

Code below creates a log file at the following location:

/ExternalStorage/MyPersonalAppFolder/logs/logcat_XXX.txt 

XXX is the current time in milliseconds. Every time you run your app, a new logcat_XXX.txt file will be created.

public class MyPersonalApp extends Application {      /**      * Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.      */     public void onCreate() {         super.onCreate();          if ( isExternalStorageWritable() ) {              File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyPersonalAppFolder" );             File logDirectory = new File( appDirectory + "/logs" );             File logFile = new File( logDirectory, "logcat_" + System.currentTimeMillis() + ".txt" );              // create app folder             if ( !appDirectory.exists() ) {                 appDirectory.mkdir();             }              // create log folder             if ( !logDirectory.exists() ) {                 logDirectory.mkdir();             }              // clear the previous logcat and then write the new one to the file             try {                 Process process = Runtime.getRuntime().exec("logcat -c");                 process = Runtime.getRuntime().exec("logcat -f " + logFile);             } catch ( IOException e ) {                 e.printStackTrace();             }          } else if ( isExternalStorageReadable() ) {             // only readable         } else {             // not accessible         }     }      /* Checks if external storage is available for read and write */     public boolean isExternalStorageWritable() {         String state = Environment.getExternalStorageState();         if ( Environment.MEDIA_MOUNTED.equals( state ) ) {             return true;         }         return false;     }      /* Checks if external storage is available to at least read */     public boolean isExternalStorageReadable() {         String state = Environment.getExternalStorageState();         if ( Environment.MEDIA_MOUNTED.equals( state ) ||                 Environment.MEDIA_MOUNTED_READ_ONLY.equals( state ) ) {             return true;         }         return false;     } } 

you need the correct permissions and name of your application class in your .manifest file:

<uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  <application     android:name=".MyPersonalApp"     ... > 

Edit:

if you want to save log of only some particular activities..

replace:

process = Runtime.getRuntime().exec("logcat -f " + logFile); 

with:

process = Runtime.getRuntime().exec( "logcat -f " + logFile + " *:S MyActivity:D MyActivity2:D"); 
like image 142
Drunken Daddy Avatar answered Oct 05 '22 04:10

Drunken Daddy


adb shell logcat -t 500 > D:\logcat_output.txt

Go onto your terminal/command prompt and navigate to the folder with adb in it, if its not already added to your environmental variables and paste this command.

t is the number lines you need to view

D:\logcat_output.txt is where your logcat will get stored.

like image 30
smophos Avatar answered Oct 05 '22 04:10

smophos