在我的Android应用程序中获取Android日志

时间:2016-03-28 11:01:20

标签: java android

我有一个场景,我需要以1秒的间隔读取连续出现在logcat上的数据。所以我创建了一个调用这个类方法的线程,但最终会出现像

这样的异常
Working Directory: null Environment: null 

我已经添加了像

这样的权限
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

代码是

public class LogsUtil {  

    public static StringBuilder readLogs() {  
        StringBuilder logBuilder = new StringBuilder();  
        try {  

            String[] cmd = new String[] { "logcat | find \\ Keymaster" /*"logcat", "-v", "time", "ActivityManager:W", "Keymaster:D"*/ };
            //Process processClear = new ProcessBuilder().command("logcat -c").redirectErrorStream(true).start();

            //String cmd[] = new String[]{"logcat"};

            Process process = Runtime.getRuntime().exec(/*"logcat -d"*/cmd);  

            BufferedReader bufferedReader = new BufferedReader(  
                    new InputStreamReader(process.getInputStream()));  

            String line;  
            while ((line = bufferedReader.readLine()) != null) {
                 Log.e(" ", ""+bufferedReader.readLine());
                logBuilder.append(line + "\n");  
            }  
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        } 
        return logBuilder;  
    }  
}  

需要阅读的确切日志是 enter image description here

如何打印相同的数据?

1 个答案:

答案 0 :(得分:0)

你可以使用

String[] cmd = new String[] {"logcat", "-d", "Keymaster:V *:S" }

但是如果您需要自己的日志,我建议您只使用自己的记录器

<uses-permission android:name="android.permission.READ_LOGS" />

对我来说太冒犯了。

您可以使用Timber根据需要使用特定的本地记录器。 或具有可视化器形式the google examples

的通用记录器