问题小结(22)--代码实现logcat保存

让logcat实时的输出保存到某个目录下,我们基本都知道可以通过adb命令来实现,那么怎么通过代码实现呢?这是本篇博文要说的内容。

我这里是把log保存到了sdcard的根目录下,不罗嗦了,上代码。

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.os.Environment;
import android.util.Log;

public class WriteLog {

	private static final String TAG = "Log";
	// LogWrite
	private String LOG_PATH_SDCARD_DIR; // log file path in sdcard

	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");// log
																				// name

	private Process process;

	private static WriteLog mLogDemo = null;

	private WriteLog() {
		init();
	}

	public static WriteLog getInstance() {
		if (mLogDemo == null) {
			mLogDemo = new WriteLog();
		}

		return mLogDemo;
	}

	public void startLog() {
		createLog();

	}

	public void stopLog() {
		if (process != null) {
			process.destroy();
		}

	}

	private void init() {

		LOG_PATH_SDCARD_DIR = Environment.getExternalStorageDirectory()
				.getAbsolutePath();
		createLogDir();
		Log.i(TAG, "Log onCreate");
	}

	/**
	 * write the log
	 */
	public void createLog() {
		// TODOWriteLog

		List<String> commandList = new ArrayList<String>();
		commandList.add("logcat");
		commandList.add("-f");
		commandList.add(getLogPath());
		commandList.add("-v");
		commandList.add("time");

		try {
			process = Runtime.getRuntime().exec(
					commandList.toArray(new String[commandList.size()]));
		} catch (Exception e) {
			Log.e(TAG,e.getMessage(), e);
		}
	}

	/**
	 * the path of the log file
	 * 
	 * @return
	 */
	public String getLogPath() {
		createLogDir();
		String logFileName = sdf.format(new Date()) + ".log";// name

		Log.d(TAG, "Log stored in SDcard, the path is:" + LOG_PATH_SDCARD_DIR
				+ File.separator + logFileName);
		return LOG_PATH_SDCARD_DIR + File.separator + logFileName;

	}

	/**
	 * make the dir
	 */
	private void createLogDir() {
		File file;
		boolean mkOk;

		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			file = new File(LOG_PATH_SDCARD_DIR);
			if (!file.isDirectory()) {
				mkOk = file.mkdirs();
				if (!mkOk) {
					return;
				}
			}
		}
	}

}

使用的是单例模式,使用方法也很简单,如下:

WriteLog log = WriteLog.getInstance();
log.startLog();//开始保存log

在你调起以后它就可以实时的去保存log至我们指定的路径,如果需要停止log的保存输出就需要调用stopLog()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值