Android将应用调试log信息保存在SD卡的方法
把自己应用的调试信息写入到SD卡中。
packagecom.sdmc.hotel.util; importjava.io.BufferedReader; importjava.io.File; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStreamReader; importandroid.content.Context; importandroid.os.Environment; importandroid.util.Log; /** *log日志统计保存 *会打印i,e,w,不会打印d *每次开启应用,就会把上次的log信息覆盖 *@authorway * */ publicclassLogcatHelper{ privatestaticLogcatHelperINSTANCE=null; privatestaticStringPATH_LOGCAT; privateLogDumpermLogDumper=null; privateintmPId; /** * *初始化目录 * **/ publicvoidinit(Contextcontext){ if(Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)){//优先保存到SD卡中 PATH_LOGCAT=Environment.getExternalStorageDirectory() .getAbsolutePath()+File.separator+"miniGPS"; }else{//如果SD卡不存在,就保存到本应用的目录下 PATH_LOGCAT=context.getFilesDir().getAbsolutePath() +File.separator+"miniGPS"; } Filefile=newFile(PATH_LOGCAT); if(!file.exists()){ file.mkdirs(); } } publicstaticLogcatHelpergetInstance(Contextcontext){ if(INSTANCE==null){ INSTANCE=newLogcatHelper(context); } returnINSTANCE; } privateLogcatHelper(Contextcontext){ init(context); mPId=android.os.Process.myPid(); } publicvoidstart(){ if(mLogDumper==null){ mLogDumper=newLogDumper(String.valueOf(mPId),PATH_LOGCAT); } Log.i("path",PATH_LOGCAT);///storage/sdcard0/miniGPS mLogDumper.start(); } publicvoidstop(){ if(mLogDumper!=null){ mLogDumper.stopLogs(); mLogDumper=null; } } privateclassLogDumperextendsThread{ privateProcesslogcatProc; privateBufferedReadermReader=null; privatebooleanmRunning=true; Stringcmds=null; privateStringmPID; privateFileOutputStreamout=null; publicLogDumper(Stringpid,Stringdir){ mPID=pid; try{ out=newFileOutputStream(newFile(dir,"GPS-" +MyDate.getFileName()+".log")); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } /** * *日志等级:*:v,*:d,*:w,*:e,*:f,*:s * *显示当前mPID程序的E和W等级的日志. * **/ //cmds="logcat*:e*:w|grep\"("+mPID+")\""; //cmds="logcat|grep\"("+mPID+")\"";//打印所有日志信息 //cmds="logcat-sway";//打印标签过滤信息 cmds="logcat*:e*:i|grep\"("+mPID+")\"";//会打印i,e,w,不会打印d } publicvoidstopLogs(){ mRunning=false; } @Override publicvoidrun(){ try{ logcatProc=Runtime.getRuntime().exec(cmds); mReader=newBufferedReader(newInputStreamReader( logcatProc.getInputStream()),1024); Stringline=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(IOExceptione){ e.printStackTrace(); }finally{ if(logcatProc!=null){ logcatProc.destroy(); logcatProc=null; } if(mReader!=null){ try{ mReader.close(); mReader=null; }catch(IOExceptione){ e.printStackTrace(); } } if(out!=null){ try{ out.close(); }catch(IOExceptione){ e.printStackTrace(); } out=null; } } } } }
系统权限
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.READ_LOGS"/>
时间工具类:
packagecom.sdmc.hotel.util; importjava.text.SimpleDateFormat; importjava.util.Date; publicclassMyDate{ publicstaticStringgetFileName(){ SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd"); Stringdate=format.format(newDate(System.currentTimeMillis())); returndate;//2012年10月03日23:41:31 } publicstaticStringgetDateEN(){ SimpleDateFormatformat1=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Stringdate1=format1.format(newDate(System.currentTimeMillis())); returndate1;//2012-10-0323:41:31 } }
方法的调用:
publicclassMyApplicationextendsApplication{ @Override publicvoidonCreate(){ LogcatHelper.getInstance(this).start(); } }