Android将应用调试log信息保存在SD卡的方法

所属分类: 软件编程 / Android 阅读数: 147
收藏 0 赞 0 分享

把自己应用的调试信息写入到SD卡中。

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日志统计保存 
* 会打印i,e,w,不会打印d
* 每次开启应用,就会把上次的log信息覆盖 
* @author way 
* 
*/ 
public class LogcatHelper { 
private static LogcatHelper INSTANCE = null; 
private static String PATH_LOGCAT; 
private LogDumper mLogDumper = null; 
private int mPId; 
/** 
* 
* 初始化目录 
* 
* */ 
public void init(Context context) { 
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"; 
} 
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(); 
} 
/** 
* 
* 日志等级:*:v , *:d , *:w , *:e , *:f , *:s 
* 
* 显示当前mPID程序的 E和W等级的日志. 
* 
* */ 
// cmds = "logcat *:e *:w | grep \"(" + mPID + ")\""; 
// cmds = "logcat | grep \"(" + mPID + ")\"";//打印所有日志信息 
// cmds = "logcat -s way";//打印标签过滤信息 
cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";//会打印i,e,w,不会打印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; 
} 
} 
} 
} 
} 

系统权限

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

时间工具类:

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年10月03日 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 
} 
}

方法的调用:

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

更多精彩内容其他人还在看

老生常谈Android HapticFeedback(震动反馈)

下面小编就为大家带来一篇老生常谈Android HapticFeedback(震动反馈)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详谈OnTouchListener与OnGestureListener的区别

下面小编就为大家带来一篇详谈OnTouchListener与OnGestureListener的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿知乎悬浮功能按钮FloatingActionButton效果

前段时间在看属性动画,恰巧这个按钮的效果可以用属性动画实现,下面通过本文给大家分享adroid仿知乎悬浮功能按钮FloatingActionButton效果,需要的朋友参考下吧
收藏 0 赞 0 分享

解决Android V7后自定义Toolbar、ActionBar左侧有空白问题

这篇文章主要介绍的Android V7后自定义Toolbar、ActionBar左侧有空白问题的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android常见控件使用详解

这篇文章主要为大家详细介绍了Android常见控件的使用方法,包括ProgressBar进度条控件、AlertDialog对话框控件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android实现简洁的APP更新dialog数字进度条

这篇文章主要为大家详细介绍了Android实现简洁的APP更新dialog数字进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 判断当前语言环境是否是中文环境

本文主要介绍了Android 判断当前语言环境是否是中文环境的方法。具有很好的参考价值。下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详谈Android中Matrix的set、pre、post的区别

下面小编就为大家带来一篇详谈Android中Matrix的set、pre、post的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现登录界面记住密码的存储

这篇文章主要为大家详细介绍了Android SharedPreferrences实现登录界面记住密码的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 使用SharedPreferrences储存密码登录界面记住密码功能

Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,下面通过实例代码给大家讲解下,需要的朋友参考下吧
收藏 0 赞 0 分享
查看更多