android编程log使用,android - 在应用程序中以编程方式读取logcat

这是一个快速放置/放入,可用于捕获所有当前或所有新的(自上次请求以来)日志项。

您应该修改/扩展它,因为您可能希望返回连续流而不是LogCapture。

Android LogCat"手册":[https://developer.android.com/studio/command-line/logcat.html]     import android.util.Log;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Collection;

import java.util.Date;

import java.util.List;

import java.util.Stack;

/**

* Created by triston on 6/30/17.

*/

public class Logger {

// http://www.java2s.com/Tutorial/Java/0040__Data-Type/SimpleDateFormat.htm

private static final String ANDROID_LOG_TIME_FORMAT = "MM-dd kk:mm:ss.SSS";

private static SimpleDateFormat logCatDate = new SimpleDateFormat(ANDROID_LOG_TIME_FORMAT);

public static String lineEnding = "\n";

private final String logKey;

private static List logKeys = new ArrayList();

Logger(String tag) {

logKey = tag;

if (! logKeys.contains(tag)) logKeys.add(logKey);

}

public static class LogCapture {

private String lastLogTime = null;

public final String buffer;

public final List log, keys;

LogCapture(String oLogBuffer, ListoLogKeys) {

this.buffer = oLogBuffer;

this.keys = oLogKeys;

this.log = new ArrayList<>();

}

private void close() {

if (isEmpty()) return;

String[] out = log.get(log.size() - 1).split(" ");

lastLogTime = (out[0]+" "+out[1]);

}

private boolean isEmpty() {

return log.size() == 0;

}

public LogCapture getNextCapture() {

LogCapture capture = getLogCat(buffer, lastLogTime, keys);

if (capture == null || capture.isEmpty()) return null;

return capture;

}

public String toString() {

StringBuilder output = new StringBuilder();

for (String data : log) {

output.append(data+lineEnding);

}

return output.toString();

}

}

/**

* Get a list of the known log keys

* @return copy only

*/

public static List getLogKeys() {

return logKeys.subList(0, logKeys.size() - 1);

}

/**

* Platform: Android

* Get the logcat output in time format from a buffer for this set of static logKeys.

* @param oLogBuffer logcat buffer ring

* @return A log capture which can be used to make further captures.

*/

public static LogCapture getLogCat(String oLogBuffer) { return getLogCat(oLogBuffer, null, getLogKeys()); }

/**

* Platform: Android

* Get the logcat output in time format from a buffer for a set of log-keys; since a specified time.

* @param oLogBuffer logcat buffer ring

* @param oLogTime time at which to start capturing log data, or null for all data

* @param oLogKeys logcat tags to capture

* @return A log capture; which can be used to make further captures.

*/

public static LogCapture getLogCat(String oLogBuffer, String oLogTime, List oLogKeys) {

try {

ListsCommand = new ArrayList();

sCommand.add("logcat");

sCommand.add("-bmain");

sCommand.add("-vtime");

sCommand.add("-s");

sCommand.add("-d");

sCommand.add("-T"+oLogTime);

for (String item : oLogKeys) sCommand.add(item+":V"); // log level: ALL

sCommand.add("*:S"); // ignore logs which are not selected

Process process = new ProcessBuilder().command(sCommand).start();

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(process.getInputStream()));

LogCapture mLogCapture = new LogCapture(oLogBuffer, oLogKeys);

String line = "";

long lLogTime = logCatDate.parse(oLogTime).getTime();

if (lLogTime > 0) {

// Synchronize with "NO YEAR CLOCK" @ unix epoch-year: 1970

Calendar calendar = Calendar.getInstance();

calendar.setTime(new Date(oLogTime));

calendar.set(Calendar.YEAR, 1970);

Date calDate = calendar.getTime();

lLogTime = calDate.getTime();

}

while ((line = bufferedReader.readLine()) != null) {

long when = logCatDate.parse(line).getTime();

if (when > lLogTime) {

mLogCapture.log.add(line);

break; // stop checking for date matching

}

}

// continue collecting

while ((line = bufferedReader.readLine()) != null) mLogCapture.log.add(line);

mLogCapture.close();

return mLogCapture;

} catch (Exception e) {

// since this is a log reader, there is nowhere to go and nothing useful to do

return null;

}

}

/**

* "Error"

* @param e

*/

public void failure(Exception e) {

Log.e(logKey, Log.getStackTraceString(e));

}

/**

* "Error"

* @param message

* @param e

*/

public void failure(String message, Exception e) {

Log.e(logKey, message, e);

}

public void warning(String message) {

Log.w(logKey, message);

}

public void warning(String message, Exception e) {

Log.w(logKey, message, e);

}

/**

* "Information"

* @param message

*/

public void message(String message) {

Log.i(logKey, message);

}

/**

* "Debug"

* @param message a Message

*/

public void examination(String message) {

Log.d(logKey, message);

}

/**

* "Debug"

* @param message a Message

* @param e An failure

*/

public void examination(String message, Exception e) {

Log.d(logKey, message, e);

}

}

在执行活动记录的项目中:

Logger log = new Logger("SuperLog");

// perform logging methods

当您想要捕获您记录的所有内容时,记录器&#34;

LogCapture capture = Logger.getLogCat("main");

当你饿了,你想吃更多的原木

LogCapture nextCapture = capture.getNextCapture();

您可以将捕获作为字符串

String captureString = capture.toString();

或者您可以获取捕获的日志项

String logItem = capture.log.get(itemNumber);

没有精确的静态方法来捕获外部日志键,但有一种方法

LogCapture foreignCapture = Logger.getLogCat("main", null, foreignCaptureKeyList);

使用上述内容还允许您在外国捕获时调用Logger.this.nextCapture。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值