如何获取 android 的系统日志 logcat

2024-12-03 20:00:46
推荐回答(1个)
回答1:

您好,很高兴为您解答。

读取日志需要的权限


主要代码
package mt.fzgh;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class MyLog
{
public static class MLog //静态类
{
public static void getLog()
{
System.out.println("--------func start--------"); // 方法启动
try
{
ArrayList cmdLine=new ArrayList(); //设置命令 logcat -d 读取日志
cmdLine.add("logcat");
cmdLine.add("-d");

ArrayList clearLog=new ArrayList(); //设置命令 logcat -c 清除日志
clearLog.add("logcat");
clearLog.add("-c");

Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader

// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行
{
Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志.这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满
System.out.println(str); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器..
}
if(str==null)
{
System.out.println("-- is null --");
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------func end--------");
}
}
}
这里比较令人纠结的一点就是日志的清理 logcat -c 如果不加入 清理 在buffer满为止,代码自身能够迭代6~7次.
附带一份logcat的 命令不过好像 过滤器 指令有问题.慎用选项 说明 -s 默认设置过滤器 - f 文件 输出到日志文件 -c 清除日志 -d 获取日志 -g 获取日志的大小 - v 格式 设置日志(见下面的格式打印格式) - v 格式 例brief W/tag ( 876): messageprocess W( 876) message (tag)tag W/tag : messagethread W( 876:0x37c) messageraw messagetime 09-08 05:40:26.729 W/tag ( 876): messagethreadtime 09-08 05:40:26.729 876 892 W tag : messagelong [09-08 05:40:26.729 876:0x37c W/tag ] message
如若满意,请点击右侧【答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,!

~ O(∩_∩)O~