如何获取 android 的系统日志 logcat

2024-12-02 21:37:40
推荐回答(5个)
回答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): message

process                      W( 876) message (tag)

tag                             W/tag : message

thread                        W( 876:0x37c) message

raw                            message

time                           09-08 05:40:26.729 W/tag ( 876): message

threadtime                 09-08 05:40:26.729 876 892 W tag : message

long                           [09-08 05:40:26.729 876:0x37c W/tag ] message


如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

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

                                                                                                                            ~ O(∩_∩)O~

回答2:

直接在命令行重定向即可将logcat中输出的日志保存到文件中。
android开发中如果如果要将logcat中输出信息的保存到文件中,按以下步骤:
1. 示例1: adb logcat > /sdcard/mylogcat.txt,表示将logcat的输出重定向到/sdcard/mylogcat.txt文件中。
2. 示例2: db logcat > D:/Temp/1.txt(1.txt必须存在,才能写入logcat内容),表示将logcat输出的日志保存到电脑D盘Temp目录下的1.txt中。

回答3:

Android studio的最低下有logcat或者Android monitor这一选项,如果是已有app,就要看开发时有没有将logcat写到本地的操作了,一般都不会留下,logcat更多是用于开发时调试

回答4:

Window-->Show View-->Others -->android-->logcat

回答5:

网页链接