Method for Android to save application debugging log information in SD card

  • 2021-07-06 11:53:05
  • OfStack

Write the debugging information of your application to SD card.


package com.sdmc.hotel.util;
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import android.content.Context; 
import android.os.Environment; 
import android.util.Log;
/** 
* log Log statistics saving  
*  Will print i , e , w Will not print d
*  Every time you open the application, you will put the last log Information coverage  
* @author way 
* 
*/ 
public class LogcatHelper { 
private static LogcatHelper INSTANCE = null; 
private static String PATH_LOGCAT; 
private LogDumper mLogDumper = null; 
private int mPId; 
/** 
* 
*  Initialize directory  
* 
* */ 
public void init(Context context) { 
if (Environment.getExternalStorageState().equals( 
Environment.MEDIA_MOUNTED)) {//  Save preferentially to SD Card  
PATH_LOGCAT = Environment.getExternalStorageDirectory() 
.getAbsolutePath() + File.separator + "miniGPS"; 
} else {//  If SD If the card does not exist, save it to the directory of this application  
PATH_LOGCAT = context.getFilesDir().getAbsolutePath() 
+ File.separator + "miniGPS"; 
} 
File file = new File(PATH_LOGCAT); 
if (!file.exists()) { 
file.mkdirs(); 
} 
} 
public static LogcatHelper getInstance(Context context) { 
if (INSTANCE == null) { 
INSTANCE = new LogcatHelper(context); 
} 
return INSTANCE; 
} 
private LogcatHelper(Context context) { 
init(context); 
mPId = android.os.Process.myPid(); 
} 
public void start() { 
if (mLogDumper == null){ 
mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT); 
}
Log.i("path", PATH_LOGCAT);///storage/sdcard0/miniGPS
mLogDumper.start(); 
} 
public void stop() { 
if (mLogDumper != null) { 
mLogDumper.stopLogs(); 
mLogDumper = null; 
} 
} 
private class LogDumper extends Thread { 
private Process logcatProc; 
private BufferedReader mReader = null; 
private boolean mRunning = true; 
String cmds = null; 
private String mPID; 
private FileOutputStream out = null; 
public LogDumper(String pid, String dir) { 
mPID = pid; 
try { 
out = new FileOutputStream(new File(dir, "GPS-" 
+ MyDate.getFileName() + ".log")); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
/** 
* 
*  Log level: *:v , *:d , *:w , *:e , *:f , *:s 
* 
*  Displays the current mPID Procedural  E And W Log of level . 
* 
* */ 
// cmds = "logcat *:e *:w | grep \"(" + mPID + ")\""; 
// cmds = "logcat | grep \"(" + mPID + ")\"";// Print all log information  
// cmds = "logcat -s way";// Print label filter information  
cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";// Will print i , e , w Will not print d 
} 
public void stopLogs() { 
mRunning = false; 
} 
@Override 
public void run() { 
try { 
logcatProc = Runtime.getRuntime().exec(cmds); 
mReader = new BufferedReader(new InputStreamReader( 
logcatProc.getInputStream()), 1024); 
String line = null; 
while (mRunning && (line = mReader.readLine()) != null) { 
if (!mRunning) { 
break; 
} 
if (line.length() == 0) { 
continue; 
} 
if (out != null && line.contains(mPID)) { 
out.write((MyDate.getDateEN() + " " + line + "\n") 
.getBytes()); 
} 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
if (logcatProc != null) { 
logcatProc.destroy(); 
logcatProc = null; 
} 
if (mReader != null) { 
try { 
mReader.close(); 
mReader = null; 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
if (out != null) { 
try { 
out.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
out = null; 
} 
} 
} 
} 
} 

System permissions


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

Time tool class:


package com.sdmc.hotel.util;
import java.text.SimpleDateFormat; 
import java.util.Date; 
public class MyDate { 
public static String getFileName() { 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
String date = format.format(new Date(System.currentTimeMillis())); 
return date;// 2012 Year 10 Month 03 Day  23:41:31 
} 
public static String getDateEN() { 
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String date1 = format1.format(new Date(System.currentTimeMillis())); 
return date1;// 2012-10-03 23:41:31 
} 
}

Method calls:


public class MyApplication extends Application { 
@Override 
public void onCreate() { 
LogcatHelper.getInstance(this).start(); 
} 
} 


Related articles: