android:Log日志保存到本地

原创 2015年11月20日 15:06:21

大家在开发一个应用进行调试的时候,查看log日志信息是必不可少的,因此log信息的保存是非常有必要的。下面是log日志保存的一个工具类,仅供参考。

package com.dandy.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;

/**
 * 
 * @author Administrator
 *	
 * log打印日志保存,文件的保存以小时为单位
 * permission:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
 *			  <uses-permission android:name="android.permission.READ_LOGS" />  
 */
public class LogCatHelper {
	private static LogCatHelper instance = null;
	private String dirPath;//保存路径
	private int appid;//应用pid
	private Thread logThread;
	
	/**
	 * @param mContext
	 * @param path log日志保存根目录
	 * @return
	 */
	public static LogCatHelper getInstance(Context mContext,String path){
		if(instance == null){
			instance = new LogCatHelper(mContext,path);
		}
		return instance;
	}
	
	private LogCatHelper(Context mContext,String path) {
		appid = android.os.Process.myPid();
		if(TextUtils.isEmpty(path)){
			dirPath = Environment.getExternalStorageDirectory().getAbsolutePath()
						+File.separator+"seeker"+File.separator+mContext.getPackageName();
		}else{
			dirPath = path;
		}
		File dir = new File(dirPath);
		if(!dir.exists()){
			dir.mkdirs();
		}
	}
	
	/**
	 * 启动log日志保存 
	 */
	public void start(){
		if(logThread == null){
			logThread = new Thread(new LogRunnable(appid, dirPath));
		}
		logThread.start();
	}
	
	private static class LogRunnable implements Runnable{

		private Process mProcess;
		private FileOutputStream fos;
		private BufferedReader mReader;
		private String cmds;
		private String mPid;
		
		public LogRunnable(int pid,String dirPath) {
			this.mPid = ""+pid;
			try {
				File file = new File(dirPath,FormatDate.getFormatDate()+".log");
				if(!file.exists()){
					file.createNewFile();
				}
				fos = new FileOutputStream(file,true);
			} catch (Exception e) {
				e.printStackTrace();
			}
			cmds = "logcat *:v | grep \"(" + mPid + ")\"";
		}
		
		@Override
		public void run() {
			try {
				mProcess = Runtime.getRuntime().exec(cmds);
				mReader = new BufferedReader(new InputStreamReader(mProcess.getInputStream()),1024);
				String line;
				while((line = mReader.readLine()) != null){
					if(line.length() == 0){
						continue;
					}
					if(fos != null && line.contains(mPid)){
						fos.write((FormatDate.getFormatTime()+"	"+line+"\r\n").getBytes());
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(mProcess != null){
					mProcess.destroy();
					mProcess = null;
				}
				try {
					if(mReader != null){
						mReader.close();
						mReader = null;
					}
					if(fos != null){
						fos.close();
						fos = null;
					}
				} catch (Exception e2) {
					e2.printStackTrace();
				}
			}
		}
	}
	
	@SuppressLint("SimpleDateFormat")
	private static class FormatDate{
		
		public static String getFormatDate(){
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
			return sdf.format(System.currentTimeMillis());
		}
		
		public static String getFormatTime(){
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return sdf.format(System.currentTimeMillis());
		}
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android将应用log信息保存文件

相信大家在做应用调试的时候,不可能时时通过USB线连着电脑去查看log信息,所以,将应用的log信息保存到手机本地就很有必要了,有助我们从这些log信息中提取有用的部分,以解决一些bug,下面我把网上...
  • weidi1989
  • weidi1989
  • 2013年01月10日 00:14
  • 25049

优化Android Log类,并保存日志内容至文件

目的何在 枚举日志级别 封装原生方法 保存日志内容至文件 组件初始化 目的何在?为什么要优化log?举两个例子。开发中遇到问题时,我们喜欢用log帮助自己分析问题,通常没有在解决问题之后删除日志输出代...
  • flueky
  • flueky
  • 2017年08月14日 17:22
  • 1068

android log 的工具类 ,把日志保存到本地

android log 的工具类 ,把日志保存到本地 package com.example.demo; import java.io.BufferedWriter; import jav...
  • yyhjifeng
  • yyhjifeng
  • 2017年06月01日 13:33
  • 585

Android 管理日志,所有输出日志保存本地

  • 2017年05月24日 16:11
  • 9KB
  • 下载

Android项目中异常捕获及对应Log日志文件保存

做程序开发,肯定离不开与BUG打交道,更加离不开程序异常的出现。在开发的时候,我们可以通断点调试,日志打印,异常捕获工具等方式发现或处理程序 中的Exception。那客户在使用我们的应用时,...
  • true100
  • true100
  • 2016年04月18日 13:53
  • 5180

Android将应用log信息保存文件

package com.tongseng.lgocat; import android.content.Context; import android.os.Environment; import...
  • Tongseng
  • Tongseng
  • 2016年07月19日 18:28
  • 1909

Android的log保存到文件上查看

在调试的时候一般都是在logcat中看日志的信息,以便找出BUG和调试信息,但是如果在真机上的话不可能一直连接电脑查看日志,所以生成日志文件并保存,是一个比较普遍的需求,下面就是最近实现的一个例子。欢...
  • taki_dsm
  • taki_dsm
  • 2012年07月31日 10:59
  • 19029

Android中对Log日志文件的分析

一,Bug出现了, 需要“干掉”它  bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你...
  • vane918
  • vane918
  • 2016年09月13日 16:16
  • 1187

Android将Log写入文件

为什么要将Log写入文件运行应用程序的时候,大多数是不会连接着IDE的; 而当应用程序崩溃时,我们需要收集复现步骤,在设备上复现,并进行Debug;而由于Android手机的多样性,有些问题是某个机...
  • u011326979
  • u011326979
  • 2016年03月15日 09:21
  • 7196

Android 开发技巧之Log写入文件

在Android开发的时候经常会遇到手机offline,影响日志的查看与分析。为此,我写了一个简单的类用于将日志写入文件中,便于以后调试的时候可以拿来使用: package org.test; ...
  • wyzxk888
  • wyzxk888
  • 2012年04月19日 16:51
  • 13854
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android:Log日志保存到本地
举报原因:
原因补充:

(最多只允许输入30个字)