logcat保存当前应用程序的日志并上传服务器或指定邮箱_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > logcat保存当前应用程序的日志并上传服务器或指定邮箱

logcat保存当前应用程序的日志并上传服务器或指定邮箱

 2013/11/18 10:23:48  huasili  博客园  我要评论(0)
  • 摘要:给大家分享一个项目中用到的日志统计并提交服务器的日志工具类.通过过得当前app的PID,采用命令行的方式实用logcat工具过滤日志。代码区:packageorg.and.util;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io
  • 标签:程序 上传 应用 应用程序 服务器 服务

给大家分享一个项目中用到的日志统计并提交服务器的日志工具类.
break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: #ffffff; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" />通过过得当前app的PID,采用命令行的方式实用logcat工具过滤日志。
代码区:

 

package org.and.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 java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.Environment;


/**
* TODO: log日志统计保存、上传-工具类
*
* @author hljdrl@gmail.com

* @date 2012-8-27 上午11:43:52

*/

public class LogcatHelper {

private static LogcatHelper INSTANCE = null;

private static String PATH_LOGCAT ;

private LogDumper mLogDumper = null;

private Context mContext;

private int mPId;

/**

* 初始化目录

* */

public static void init(Context context)

{

StringBuffer LogPath = new StringBuffer();

LogPath.append(Environment.getExternalStorageDirectory());

LogPath.append("/Android/data/");

LogPath.append(context.getPackageName()).append("/");

LogPath.append("logs").append("/");

PATH_LOGCAT = LogPath.toString();

//

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) {

mContext = 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;

}

}

public void sendLogMessage(Context context,String user)

{

if(mLogDumper!=null){

mLogDumper.setLogFileLock(true);

String file = mLogDumper.getLogFileName();

File sendFile = new File(file);

if(sendFile.exists() && sendFile.length()>2000){

try{

EmailHelper.sendMail(context, user, file);

}catch(Exception ex){

ex.printStackTrace();

}

File newFile = new File(file);

try {

newFile.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

mLogDumper.setLogFileLock(false);

}

}

private class LogDumper extends Thread{

String fileName;

private Process logcatProc;

private BufferedReader mReader = null;

private boolean mRunning = false;

String cmds=null;

private final String mPID;

private FileOutputStream out = null;

private List<String> logsMessage = new ArrayList<String>();

private boolean mLogFileLock = false;

private String logFileName;

public void setLogFileLock(boolean lock){

mLogFileLock = lock;

}

public boolean isLogFileLock()

{

return mLogFileLock;

}

public LogDumper(String pid,String file) {

mPID = String.valueOf(pid);

fileName = file;

File mFile = new File(fileName,"error.txt");

if(!mFile.exists()){

try {

mFile.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

try {

logFileName = mFile.toString();

out = new FileOutputStream(mFile,true);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

/**

* 日志等级:*:v , *:d , *:w , *:e , *:f , *:s

* 显示当前mPID程序的 E和W等级的日志.

* */

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

}

public String getLogFileName()

{

return logFileName;

}

public void stopLogs() {

mRunning = false;

}

private boolean checkFileMaxSize(String file){

File sizefile = new File(file);

if(sizefile.exists()){

//1.5MB

if(sizefile.length()>1572864){

return true;

}

else {

return false;

}

}else {

return false;

}

}



@Override

public void run() {

System.out.println("LogCatHelper'");

mRunning = true;

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;

}

synchronized (out) {

if (out != null) {

boolean maxSize = checkFileMaxSize(getLogFileName());

if(maxSize){

//文件大小超过1.5mb

sendLogMessage(mContext, DeviceHelper.getInstance(mContext).getImei());

}

if (isLogFileLock()) {

if(line.contains(mPID)){

logsMessage.add(line.getBytes() + "\n");

}

} else {

if(logsMessage.size()>0){

for(String _log:logsMessage){

out.write(_log.getBytes());

}

logsMessage.clear();

}

/**

* 再次过滤日志,筛选当前日志中有 mPID 则是当前程序的日志.

* */

if(line.contains(mPID)){

out.write(line.getBytes());

out.write("\n".getBytes());

}

}

}

}



}

} catch (IOException e) {

e.printStackTrace();

return;

} 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;

}

}

}

}



}

 

详细说明:http://android.662p.com/thread-216-1-1.html

 

发表评论
用户名: 匿名