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

 更新时间:2016年04月27日 12:00:09   作者:李培能  
Android将应用调试log信息保存在SD卡的方法大家都知道吗,下面脚本之家小编给大家分享Android将应用调试log信息保存在SD卡的方法,感兴趣的朋友参考下

把自己应用的调试信息写入到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(); 
} 
} 

相关文章

  • 将替代ListView的RecyclerView 的使用详解(一)

    将替代ListView的RecyclerView 的使用详解(一)

    这篇文章主要介绍了将替代ListView的RecyclerView 的使用详解(一)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 轻松实现Android仿淘宝地区选择功能

    轻松实现Android仿淘宝地区选择功能

    这篇文章主要介绍了轻松实现Android仿淘宝地区选择功能的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 项目发布Debug和Release版的区别详解

    项目发布Debug和Release版的区别详解

    这篇文章主要为大家详细介绍了项目发布Debug和Release版的区别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Android文件读写的几种方式

    Android文件读写的几种方式

    文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种,下面这篇文章主要给大家介绍了关于Android文件读写的几种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Android TextView实现带链接文字事件监听的三种常用方式示例

    Android TextView实现带链接文字事件监听的三种常用方式示例

    这篇文章主要介绍了Android TextView实现带链接文字事件监听的方法,结合实例形式分析了链接跳转、setMovementMethod及布局属性设置三种常用的实现方式,需要的朋友可以参考下
    2017-08-08
  • Android开发者必备的十个工具介绍

    Android开发者必备的十个工具介绍

    这篇文章主要介绍了Android开发者必备的十个工具介绍,在这篇文章中,讨论了10个最常见的工具,android 开发者应该了解和学习使用,需要的朋友可以参考下
    2015-03-03
  • Android性能优化之ViewPagers + Fragment缓存优化

    Android性能优化之ViewPagers + Fragment缓存优化

    这篇文章主要介绍了Android性能优化之ViewPagers+Fragment缓存优化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Android自定义状态栏颜色与应用标题栏颜色一致

    Android自定义状态栏颜色与应用标题栏颜色一致

    看IOS上的应用,应用中状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,对于这种效果怎么实现的呢?下面小编给大家分享android自定义状态栏颜色与应用标题栏颜色一致的实现方法,一起看看吧
    2016-09-09
  • Android优雅的方式解决软键盘遮挡按钮问题

    Android优雅的方式解决软键盘遮挡按钮问题

    这篇文章主要介绍了Android优雅的方式解决软键盘遮挡按钮问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Kotlin实现图片选择器的关键技术点总结

    Kotlin实现图片选择器的关键技术点总结

    这篇文章主要给大家介绍了关于Kotlin实现图片选择器的一些关键技术点,这是一个我在学习Kotlin过程中的一个练手项目,非常适合学习Kotlin的时候参考,需要的朋友可以参考下
    2021-09-09

最新评论