人人网SDK Demo项目学习获取系统Log类

本文介绍了一个使用RenrenSDK从Android设备获取日志的方法,包括日志读取和清理功能,以及日志解析以展示清晰的日志结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

renrenSDK中有个获取系统Log的方法 将来可能用的到吧

/**
 * $id$
 */
package com.renren.api.connect.android.demo;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/**
 * Read the logcat log
 * 
 * @author Shaofeng Wang (shaofeng.wang@renren-inc.com)
 */
public final class LogHelper {


	private static final String LOG_TAG_REQUEST = "Renren-SDK-Request";
	
	private static final String LOG_TAG_RESPONSE = "Renren-SDK-Response";
	/**
	 * Get the log using the specified filter 
	 * 
	 * @param tag 
	 * @return
	 */
	public synchronized String getLog() { 
		StringBuffer logger = new StringBuffer();
		try {
			Process process = Runtime.getRuntime().exec("logcat -v time + "
					+ LOG_TAG_REQUEST + ":I " 
					+ LOG_TAG_RESPONSE + ":I *:S");
			BufferedReader bufferedReader = new BufferedReader(
					new InputStreamReader(process.getInputStream()), 1024);
			Thread thread = new Thread(new LogFinalizer(process));
			thread.start();
			String line = bufferedReader.readLine();
			while (line != null && line.length() != 0) {
				logger.append(parseLog(line));
				line = bufferedReader.readLine();
			}
			if(bufferedReader != null) {
				bufferedReader.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return logger.toString();
	}
	
	/**
	 * clear the log
	 */
	public synchronized void clear() {
		try {
			Runtime.getRuntime().exec("logcat -c + "
					+ LOG_TAG_REQUEST + ":I " 
					+ LOG_TAG_RESPONSE + ":I *:S");
		} catch (IOException e) {
		}
	}
	
	/**
	 * 解析log为显示格式
	 * @param log
	 * @return
	 */
	private static String parseLog(String logStr) {
		StringBuffer sb = new StringBuffer();
		String requestTag = "I/" + LOG_TAG_REQUEST;
		String responseTag = "I/" + LOG_TAG_RESPONSE;
		if(logStr.contains(requestTag)) { 
			//请求log 格式形如:08-23 03:05:43.112 I/Renren-SDK-Request(  775): 
			//method=users.getInfo&Bundle[{v=1.0, uids=3××××××, …… 
			StringBuffer log = new StringBuffer(logStr);
			int tagIndex = log.indexOf(requestTag);
			//添加时间
			sb.append(log.substring(0, tagIndex)).append("\r\n");
			int methodIndex = log.indexOf("method");
			int methodEnd = log.indexOf("&");
			//添加method项
			sb.append(log.substring(methodIndex, methodEnd)).append("\r\n").append("request:\r\n");
			String bundleStr = "Bundle[{";
			int paramIndex = log.indexOf(bundleStr, 0) + bundleStr.length();
			//获取参数序列(不包括"[{"以及"}]")
			String paramStr = log.substring(paramIndex, log.length() - 2);
			//添加参数 key=value 对
			String[] params = paramStr.split(",");
			sb.append("{\r\n");
			if(params != null) {
				for(String str : params) {
					sb.append("\t").append(str.trim()).append(";\r\n");
				}
			}
			sb.append("}\r\n\r\n");
		} else if(logStr.contains(responseTag)){ 
			//响应log 格式形如:03:05:51.452 I/Renren-SDK-Response(  775): 
			// method=status.set&{"result":1}…… 
			StringBuffer log = new StringBuffer(logStr);
			int tagIndex = log.indexOf(responseTag);
			//添加时间
			sb.append(log.substring(0, tagIndex)).append("\r\n");
			int methodIndex = log.indexOf("method");
			int methodEnd = log.indexOf("&");
			//添加method项
			sb.append(log.substring(methodIndex, methodEnd)).append("\r\n").append("response:\r\n");
			int paramIndex = methodEnd + 1;
			//获取参数序列
			String paramStr = log.substring(paramIndex, log.length());
			//添加参数 key=value 对
			paramStr.replace(",", ",\r\n");
			sb.append(paramStr).append("\r\n\r\n");
		} else {
			return logStr;
		}
		return sb.toString();
	}
	
	/**
	 * Used to stop the log process after a specified time 
	 * 
	 * @author Shaofeng Wang (shaofeng.wang@renren-inc.com)
	 */
	private class LogFinalizer implements Runnable{
		
		private Process process;
		
		public LogFinalizer(Process process) {
			this.process = process;
		}


		@Override
		public void run() {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
			}
			process.destroy();
		}
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值