linux logcat输出到电脑,Android中保存Logcat信息到文件

首先要声明权限:

实现工具类LogcatFileManager,代码如下:

package com.fangdd.maiyunmanager.logutil;

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 java.text.SimpleDateFormat;

import java.util.Date;

import android.content.Context;

import android.os.Environment;

public class LogcatFileManager

{

private static LogcatFileManager INSTANCE = null;

private static String PATH_LOGCAT;

private LogDumper mLogDumper = null;

private int mPId;

private SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd");

private SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static LogcatFileManager getInstance()

{

if (INSTANCE == null)

{

INSTANCE = new LogcatFileManager();

}

return INSTANCE;

}

private LogcatFileManager()

{

mPId = android.os.Process.myPid();

}

public void startLogcatManager(Context context)

{

String folderPath = null;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

{

folderPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "MMF-Logcat";

}

else

{

folderPath = context.getFilesDir().getAbsolutePath() + File.separator + "MMF-Logcat";

}

LogcatFileManager.getInstance().start(folderPath);

}

public void stopLogcatManager()

{

LogcatFileManager.getInstance().stop();

}

private void setFolderPath(String folderPath)

{

File folder = new File(folderPath);

if (!folder.exists())

{

folder.mkdirs();

}

if (!folder.isDirectory())

{

throw new IllegalArgumentException("The logcat folder path is not a directory: " + folderPath);

}

PATH_LOGCAT = folderPath.endsWith("/") ? folderPath : folderPath + "/";

LogUtils.d(PATH_LOGCAT);

}

public void start(String saveDirectoy)

{

setFolderPath(saveDirectoy);

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, "logcat-" + simpleDateFormat1.format(new Date()) + ".log"), true);

}

catch (FileNotFoundException e)

{

e.printStackTrace();

}

/**

* * * log level:*:v , *:d , *:w , *:e , *:f , *:s * * Show the

* current mPID process level of E and W log. * *

*/

// cmds = "logcat *:e *:w | grep \"(" + mPID + ")\"";

cmds = "logcat *:e *:w | 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((simpleDateFormat2.format(new Date()) + "  " + 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;

}

}

}

}

}

然后在应用启动和退出时关闭管理器就行

-------------------------------------------分割线-------------------------------------------

64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细) http://www.linuxidc.com/Linux/2013-06/85303.htm

-------------------------------------------分割线-------------------------------------------

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值