diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index d92cc7eb043d0ef8ec85162bf00391c9cf4307cc..cf047deceb399a51aceeb15c8cb7894937b8ff19 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -351,24 +351,17 @@ void AndroidRunner::stop()
     m_adbLogcatProcess.waitForFinished();
 }
 
-void AndroidRunner::logcatReadStandardError()
+void AndroidRunner::logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError)
 {
-    emit remoteErrorOutput(m_adbLogcatProcess.readAllStandardError());
-}
-
-void AndroidRunner::logcatReadStandardOutput()
-{
-    if (m_processPID == -1)
-        return;
-    QList<QByteArray> lines = m_adbLogcatProcess.readAllStandardOutput().split('\n');
+    QList<QByteArray> lines = text.split('\n');
     // lines always contains at least one item
-    lines[0].prepend(m_logcat);
+    lines[0].prepend(buffer);
     if (!lines.last().endsWith('\n')) {
         // incomplete line
-        m_logcat = lines.last();
+        buffer = lines.last();
         lines.removeLast();
     } else {
-        m_logcat.clear();
+        buffer.clear();
     }
 
     QByteArray pid(QString::fromLatin1("%1):").arg(m_processPID).toLatin1());
@@ -378,7 +371,7 @@ void AndroidRunner::logcatReadStandardOutput()
         if (line.endsWith('\r'))
             line.chop(1);
         line.append('\n');
-        if (line.startsWith("E/")
+        if (onlyError || line.startsWith("E/")
                 || line.startsWith("D/Qt")
                 || line.startsWith("W/"))
             emit remoteErrorOutput(line);
@@ -388,6 +381,18 @@ void AndroidRunner::logcatReadStandardOutput()
     }
 }
 
+void AndroidRunner::logcatReadStandardError()
+{
+    if (m_processPID != -1)
+        logcatProcess(m_adbLogcatProcess.readAllStandardError(), m_stderrBuffer, true);
+}
+
+void AndroidRunner::logcatReadStandardOutput()
+{
+    if (m_processPID != -1)
+        logcatProcess(m_adbLogcatProcess.readAllStandardOutput(), m_stdoutBuffer, false);
+}
+
 void AndroidRunner::adbKill(qint64 pid)
 {
     {
diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h
index b18aee29d2f309a818df7b5ef639470d06257dbd..a42034b5574a4e1dbdf8a812281e1c37174e1978 100644
--- a/src/plugins/android/androidrunner.h
+++ b/src/plugins/android/androidrunner.h
@@ -82,6 +82,7 @@ private:
     void forceStop();
     QByteArray runPs();
     void findPs();
+    void logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError);
 
 private:
     QProcess m_adbLogcatProcess;
@@ -89,7 +90,8 @@ private:
     bool m_wasStarted;
     int m_tries;
 
-    QByteArray m_logcat;
+    QByteArray m_stdoutBuffer;
+    QByteArray m_stderrBuffer;
     QString m_intentName;
     QString m_packageName;
     QString m_deviceSerialNumber;