关闭

Android学习之路------代码中获取Logcat打印日志并存放于文件中

标签: tagandroidlogcat
4335人阅读 评论(0) 收藏 举报
分类:

1.Logcat命令的使用

logcat -c 清除屏幕显示 
logcat -d 显示 
logcat 显示日志
log logcat -f filename将日志输出到一个文件中
logcat -v time 显示时间  
logcat -v time -s tag:priority 这里会输出与priority相等或者优先级比priority优先级高的

priority有5种:

V — Verbose (优先级最低)
D — Debug 
I — Info 
W — Warning  
E — Error
F — Fatal  
S — Silent 

比如我们在串口输入logcat -v time -s ScreenSaver:D
会打印出

01-02 10:30:05.690 I/ScreenSaver(  957): screen now time = 8934wait time :480

Screensaver是tag,因为I的优先级比D高,因此也会输出I的(Log.i());

2.如何在代码中运行命令行

这需要用到

    Runtime.getRunntime.exec();

exec的参数一般为String [];
比如我们要抓取日志带时间,我们的代码可以这样写

Runtime.getRuntime.exec(new String[]{"logcat","-v","time","-s","ScreenSaver:D"})

通过exec直接运行”logcat -v time -s ScreenSaver:D”,是不行的。
上面Runntime.getRunntime.exec会返回Process对象,Process有6种方法可以调用:

1.destroy():杀掉子进程
2.exitValue():返回子进程的出口值,值 0 表示正常终止
3.getErrorStream():获取子进程的错误流
4.getInputStream():获取子进程的输入流
5.getOutputStream():获取子进程的输出流
6.waitFor():导致当前线程等待,如有必要,一直要等到由该 Process对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,根据惯例,0表示正常终止

这里我们主要使用getInputStream()来获取打印日志的输入流

3.具体代码参考

这里我只截取一部分代码作为参考


private FileOutputStream fos;
/*核心代码*/
while(captureLogThreadOpen){
                        /*
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        */
                        try{
                            /*命令的准备*/
                            ArrayList<String> getLog = new ArrayList<String>();
                            getLog.add("logcat");
                            getLog.add("-d");
                            getLog.add("-v");
                            getLog.add("time");
                            ArrayList<String> clearLog = new ArrayList<String>();
                            clearLog.add("logcat");
                            clearLog.add("-c");

                            Process process = Runtime.getRuntime().exec(getLog.toArray(new String[getLog.size()]));//抓取当前的缓存日志


                            BufferedReader buffRead = new BufferedReader(new InputStreamReader(process.getInputStream()));//获取输入流
                            Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()]));//清除是为了下次抓取不会从头抓取
                            String str = null;
                            logFile = new File(logPath+"log.txt");//打开文件
                            fos = new FileOutputStream(logFile,true);//true表示在写的时候在文件末尾追加
                            String newline = System.getProperty("line.separator");//换行的字符串
                            //Date date = new Date(System.currentTimeMillis());
                            //String time = format.format(date);

                            //Log.i(TAG, "thread");
                            while((str=buffRead.readLine())!=null){//循环读取每一行
                                //Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()]));
                                //Log.i(TAG, str);
                                SimpleDateFormat format = new SimpleDateFormat("yyyy-");
                                Date date = new Date(System.currentTimeMillis());
                                String time = format.format(date);
                                fos.write((time+str).getBytes());//加上年
                                fos.write(newline.getBytes());//换行
                                logCount++;



                                if(logCount>10000){//大于10000行就退出
                                    captureLogThreadOpen = false;
                                    captureLogThread = null;
                                    fos.close();
                                    break;
                                }
                            }
                            fos.close();
                            fos = null;
                            Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()]));
                        }catch(Exception e){

                        }

                    }

我们通过str=buffRead.readLine()来读取日志的每一行数据,再通过fos.write((time+str).getBytes());写入到文件中。

4.注意事项

目前android中想要抓取日志,只允许获取系统及以上权限的apk才能进行这个操作,否则只能获得本app的logcat,因此,在抓取日志之前,最好使用签名工具对app进行签名获取系统权限

1
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android学习之路------代码中获取Logcat打印日志并存放于文件中

代码中获取Logcat打印日志并存放于文件中
  • w71451000
  • w71451000
  • 2016-08-29 18:26
  • 4335

Android代码中获取Logcat日志信息

平时我们通过usb连接手机,然后使用adb logcat -v time > d:\xx的方式获取locat信息,但是如何在APK中编程让APP自动获取logcat信息。       方法一:使用...
  • hlllmr1314
  • hlllmr1314
  • 2016-08-15 09:36
  • 4047

android adb logcat获取日志文件

一般情况,可以直接在电脑终端上输入logcat来查看手机运行日志,但是测试工作者为了抓取日志文件来给开发人员,需要把日志导出到特定文件中。如下文。 以小米1s手机为例 步骤1:打开第一个终端窗口 ...
  • yanjunmu
  • yanjunmu
  • 2014-10-13 15:44
  • 5050

Android学习之路------代码中获取Logcat打印日志并存放于文件中

http://blog.csdn.net/w71451000/article/details/52355522 http://blog.csdn.net/w71451000/article/de...
  • u011904605
  • u011904605
  • 2017-11-17 17:36
  • 47

android日志打印代码 logcat

转载自:http://easion-zms.iteye.com/blog/981568 在调试的时候一般都是在logcat中看日志的信息,以便找出BUG和调试信息,但是如果在真机上的话不可能...
  • hlqdd
  • hlqdd
  • 2016-03-18 18:57
  • 688

Android软件开发之程序中时时获取logcat日志信息

  • 2011-09-09 22:38
  • 219KB
  • 下载

Android 日志系统logcat内核代码分析

前一篇文章:http://blog.csdn.net/andyhuabing/article/details/8547719 简要介绍了log系统的上层使用方法,本文重点分 析其log内核驱动代码,...
  • andyhuabing
  • andyhuabing
  • 2013-01-28 14:17
  • 3831

Android 日志系统logcat内核代码分析

http://blog.csdn.net/andyhuabing/article/details/8547875 前一篇文章:http://blog.csdn.net/andyhuabing/art...
  • zangchaodotcnatgmail
  • zangchaodotcnatgmail
  • 2016-04-09 15:22
  • 305

JNI的native代码中打印日志到eclipse的logcat中

 1 添加ndk对log支持 若需要添加ndk对log的支持,只需要通过以下2步即可实现。 1.1 修改Android.mk 如生成的库文件是“.so文件”,则在Android.mk中...
  • sinat_29384657
  • sinat_29384657
  • 2016-01-10 17:48
  • 391

JNI的native代码中打印日志到eclipse的logcat中

1 添加ndk对log支持 若需要添加ndk对log的支持,只需要通过以下2步即可实现。 1.1 修改Android.mk 如生成的库文件是“.so文件”,则在Android.mk中添加...
  • mazhidong
  • mazhidong
  • 2017-05-03 20:43
  • 95
    个人资料
    • 访问:10935次
    • 积分:44
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    最新评论