如何在测试应用程序期间保存log cat所有消息

时间:2013-12-04 09:27:53

标签: android android-testing

我的应用程序运行良好但是当它进行测试时,它有一些问题它崩溃了一些问题也发生了一些问题我的问题是如何在设备未连接时从设备获取我的应用程序的所有日志到计算机,因为测试人员不使用eclipse。 请帮我解决这个问题。提前感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

您应该使用崩溃报告库,例如BugSenseAccra

此类库模仿已发布应用的Android市场功能,但在测试阶段:您可以获得完整的崩溃报告,包含堆栈跟踪和其他数据(第一次/最后一次出现错误,设备型号等)

答案 1 :(得分:2)

如果你真的想要登录。您可以使用以下代码:

  logcatProc = Runtime.getRuntime().exec(cmds);  
                mReader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), 1024);  
                String line = null;  
                while ((line = mReader.readLine()) != null) {  
                    if (line.length() == 0) {  
                        continue;  
                    }  
                    if (out != null && line.contains(mPID)) {  
                        out.write((simpleDateFormat2.format(new Date()) + "  " + line + "\n").getBytes());  
                    }  
                }  

cmds =“logcat *:e *:i | grep \”(“+ mPID +”)\“”;

您可以使用自己的grep格式。

提示:logcat将暂时刷新

所以你应该将上面的代码放在一个线程中

答案 2 :(得分:1)

您应该尝试android-logging-log4j

在此Api的帮助下,您可以以文本,Xml格式的形式记录所有崩溃日志,并将存储在您将提供的路径中,如Phone memory or SD card

因此,即使设备处于离线模式,所有崩溃条目也将记录在那里。因此,您可以从该设备获取并进行调试。

希望这会对你有所帮助。

答案 3 :(得分:1)

您必须使用此代码来获取自己的项目日志。

public  class  LogcatFileManager {

    private  static  LogcatFileManager INSTANCE = null ;  
    private  static  String PATH_LOGCAT;  
    private  LogDumper mLogDumper = null ;  
    private  int  MPID;

    private  SimpleDateFormat simpleDateFormat1 = new  SimpleDateFormat ( "yyyyMMdd" );
    private  SimpleDateFormat simpleDateFormat2 = new  SimpleDateFormat ( "yyyy-MM-dd HH: mm: SS" );

    public  static  LogcatFileManager getInstance () {  
        if  (INSTANCE == null ) {  
            INSTANCE = new  LogcatFileManager ();  
        }  
        return  INSTANCE;  
    }

    private  LogcatFileManager () {  
        MPID = android.os.Process.myPid ();  
    }

    private  void  setFolderPath (String folderPath) {

        File folder = new  File (folderPath);
        if  (! folder.exists ()) {
            folder.mkdirs ();
        }

        if  (! folder.isDirectory ())
            throw  new  IllegalArgumentException ( "The folder path is Not a logcat Directory:"  + folderPath);

        PATH_LOGCAT = folderPath.endsWith("/") ? folderPath : folderPath + "/";

    }

    public  void  start (String saveDirectoy) {

        setFolderPath (saveDirectoy);

        if  (mLogDumper == null )  
            mLogDumper = new LogDumper (String.valueOf (MPID), PATH_LOGCAT);  
        mLogDumper.start ();  
    } 

    public  void  stop () {  
        if  (mLogDumper!=null ) {
            mLogDumper.stopLogs();
            mLogDumper = null ;
        }  
    }

    public  class  LogDumper extends  Thread {  

        private  Process logcatProc;  
        private  BufferedReader MReader = null ;  
        private  boolean  mRunning = true ;  
        String cmds = null ;  
        private  String MPID;  
        private  FileOutputStream out = null ;  

        public  LogDumper (String pid, String dir) { 

            MPID = pid;

            try  {  
                out = new  FileOutputStream (new File(dir, "logcat-"  + simpleDateFormat1.format (new Date ()) +".log"),true);
            } catch  (FileNotFoundException e) {  
                e.printStackTrace ();  
            }  
            cmds = "logcat *:e *:i | grep \"(" + MPID + ")\"";  
        }

        public  void  stopLogs () {  
            mRunning = false ;  
        }

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try  {  
                logcatProc = Runtime.getRuntime().exec(cmds);  
                MReader = new  BufferedReader ( new  InputStreamReader (logcatProc.getInputStream ()), 1024 );  
                String line = null ;  
                while  (mRunning && (line=MReader.readLine())!=null ) {  
                    if  (! mRunning) {  
                        break ;  
                    }  
                    if  (line.length () == 0 ) {  
                        continue ;  
                    }  
                    if  (out!=null  && line.contains (MPID)) {  
                        out.write ((simpleDateFormat2.format(new Date())+""+line+"\n").getBytes());  
                    }  
                }  

            } catch  (IOException e) {  
                e.printStackTrace ();  
            } finally  {  
                if  (logcatProc!=null ) {  
                    logcatProc.destroy();  
                    logcatProc = null ;  
                }
                if  (MReader!=null) {
                    try  {  
                        MReader.close ();  
                        MReader = null ;  
                    } catch  (IOException e) {  
                        e.printStackTrace ();  
                    } 
                }
                if (out!=null) {  
                    try {  
                        out.close ();  
                    } catch  (IOException e) {  
                        e.printStackTrace ();  
                    }  
                    out = null ;
                }
            }
        }
    }
}

答案 4 :(得分:0)

crashlytics是您需要的:http://try.crashlytics.com/ 您将被告知错误,崩溃的应用程序版本等...