I'm trying to write an app that reads all logs on my device. I've got a client/service architecture, and I see log messages from both the client and service processes but I don't see any messages from any other applications on the phone (I do see other messages using the desktop logcat).
Do I need root?
Code Snippets
Manifest
<uses-permission android:name="android.permission.READ_LOGS" />
Log Reader
Runtime.getRuntime().exec("logcat -c").waitFor();
Process process = Runtime.getRuntime().exec("logcat -v long *:*");
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
while (true) {
String nextLine = reader.readLine();
if (!nextLine.contains("LogWatcher-D")) {
Log.w("LogWatcher-D", "See: " + nextLine);
}
// Process line
}
There is another way to access all logs for all applications without root. It requires enabling remote debugging. Take a look at the open source rootless Logcat app.
To read logs from other applications programmatically, you will need to assign the same android:sharedUserId in all apks' manifest files.
On Android 4.1+, you can only access log messages logged by your process, unless you hold the
READ_LOGS
permission. That permission requires either that your app be signed by the same signing key that signed the device's firmware, or that your app is installed on the system partition.