Android将应用log信息保存文件
相信大家在做应用调试的时候,不可能时时通过USB线连着电脑去查看log信息,所以,将应用的log信息保存到手机本地就很有必要了,有助我们从这些log信息中提取有用的部分,以解决一些bug,下面我把网上分享的代码中作了一些精简,作为开发者使用,个人觉得没必要通过用户上传给我们,用户上传的不需要这么庞大的log信息,仅仅那部分崩溃的log信息即可,可参考我的另外一篇blog:http://blog.csdn.net/weidi1989/article/details/7927273。
好了,废话不多说,直接分享封装好的log信息类:LogcatHelper
- package com.way.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;
- /**
- * 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);
- 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 + ")\"";
- }
- 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.way.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
- }
- }
OK,所有事情做完之后,在我们的应用中start一下就OK了,使用完之后,记得调用一下stop:
- public class GPSApplication extends Application {
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- LogcatHelper.getInstance(this).start();
- }
- }
原文:http://blog.csdn.net/way_ping_li/article/details/8487866
Android将应用log信息保存文件的更多相关文章
- LogcatHelperDemo【应用log信息保存成本地文件】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下LogcatHelper的使用,并对原有代码进行了修改[因为保存到应用内的目录中不需要申请权限,所以去掉保存到SD的功能- ...
- Android将程序崩溃信息保存本地文件
大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...
- 【Android Developers Training】 25. 保存文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 解决在web项目使用log4j中无法将log信息写入文件
这是log4j.properties中关于的配置 log4j.appender.appender2.File=F:/myeclipseworkspace2/SecondBook2/log/second ...
- android 项目中log信息的正确处理
我们在做项目中,调试程序的时候通常是debug或者打log,特别是看一些json数据之类的,都喜欢打log看看,可是在项目上线时log信息一定不能被打印出来,大家能够平时下载一些做的烂的app,连接e ...
- openwrt 下python程序后台运行,并将打印信息保存文件
python -u gw20191223.py > test.log 1 2 & "python" 表示执行python代码 "-u" 表示不启 ...
- 查看Android系统中硬件信息的文件
文件目录: 使用Linux命令,进入到/proc目录 进入/proc目录,可以查看内存信息(memoinfo)或CPU信息(cpuinfo),使用cat命令
- python开发_搜索本地文件信息写入文件
功能:#在指定的盘符,如D盘,搜索出与用户给定后缀名(如:jpg,png)相关的文件 #然后把搜索出来的信息(相关文件的绝对路径),存放到用户指定的 #文件(如果文件不存在,则建立相应的文件)中 之前 ...
- Android开发过程中在sh,py,mk文件中添加log信息的方法
Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...
随机推荐
- [水题]Codeforces337A Puzzles
题目链接 题意:要在m个数里面选n个数, 要求这n个数的差值要最小 题意在hint里很清晰了 这道题从题意到题目本身都没有什么trick 写这道题完全是为了用一下#include <numeri ...
- 8. Unity异常警告错误处理方法
一. The AnimationClip 'cube1_anim' used by the Animation component 'Cube1' must be marked as Legacy. ...
- ANDROID_MARS学习笔记_S02_003_AutoCompleteTextView
一. public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle) { super. ...
- Qt Add ons Modules(听说QtSystem有接口可以获取 imei号)
http://wiki.qt.io/Qt-Add-ons-Modules 听说QtSystem有接口可以获取 imei号.http://wiki.qt.io/Qt-Add-ons-Modules这儿下 ...
- is present but cannot be translated into a null value due to being declared as a primitive type
解决办法:把基本类型改为对象,譬如此处将pageId的类型由int 改为Integer 2016-10-19 19:36:11.275 DEBUG [http-nio-9999-exec-2][org ...
- 如何kill掉TaobaoProtect.exe
C:\Users\Administrator\AppData\Roaming\TaobaoProtect TaobaoProtect.exe https://technet.microsoft.com ...
- Java之String,StringBuffer,StringBuilder类
在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2 ...
- Java实现查看当前目录下的文件
package com.tfj.file; import java.io.File; import java.util.ArrayList; /** * @author JackSile E-mail ...
- Arch linux安装
安装archlinux可参考: http://blog.sina.com.cn/s/blog_69e5d8400101bqlj.html http://www.cnblogs.com/mad/p/32 ...
- jquery如何选择带有多个class的元素
依次过滤$(“.good”).filter(“.list”).filter(“.Card”) 属性选择$(“[class='good list Card']“);此处 顺序必须一致才行 直接直接用 $ ...