接受的答案:
我无法弄清楚它是否是Android的错误或功能。
我有一个调用Log.d()
的应用程序,我会定期在我的设备上启动logcat,通常它的消息很多 - 大约300kb /分钟,但有时它会停止显示我和其他大多数消息。我不知道可能是什么原因。
重新启动后,一切都会再次运作。
奇怪的是,我使用Log.d()
,但我的邮件不存在,但日志仍包含其他一些罕见的D
邮件
public class AaaTest extends AndroidTestCase {
public void testA() throws Exception {
Log.wtf("foobar", "loggableE = " + Log.isLoggable("foobar", Log.ERROR));
Log.wtf("foobar", "loggableW = " + Log.isLoggable("foobar", Log.WARN));
Log.wtf("foobar", "loggableI = " + Log.isLoggable("foobar", Log.INFO));
Log.wtf("foobar", "loggableD = " + Log.isLoggable("foobar", Log.DEBUG));
Log.wtf("foobar", "loggableV = " + Log.isLoggable("foobar", Log.VERBOSE));
Log.e("foobar", "this is error");
Log.w("foobar", "this is warning");
Log.i("foobar", "this is info");
Log.d("foobar", "this is debug");
Log.v("foobar", "this is verbose");
Log.e("foobar", "this is error again");
Log.wtf("foobar", "this is wtf");
}
}
_
adb logcat -v threadtime "*:S" "foobar:V"
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
05-21 20:06:36.601 16052 16068 F foobar : loggableE = true
05-21 20:06:36.629 16052 16068 F foobar : loggableW = true
05-21 20:06:36.652 16052 16068 F foobar : loggableI = true
05-21 20:06:36.672 16052 16068 F foobar : loggableD = false
05-21 20:06:36.686 16052 16068 F foobar : loggableV = false
05-21 20:06:36.808 16052 16068 E foobar : this is error
05-21 20:06:36.808 16052 16068 E foobar : this is error again
05-21 20:06:36.809 16052 16068 F foobar : this is wtf
看起来isLoggable()
完全不相关。
我的设备是Zopo ZP300 +与Android 4.0.4
答案 0 :(得分:1)
Logcat日志保存在circular buffers中,因此只有最后一个" N" (~256K)字节保存在所有应用之间。
如果手机上的其他应用程序开始喷出日志并填满缓冲区,您可能会开始看到日志被丢弃。 如果要过滤日志(按级别或TAG),则可能看不到所有日志使用缓冲区。
您可以使用
获取有关缓冲区大小和使用情况的统计信息adb logcat -g
如果将logcat输出传输到文件并尾随文件,则应该看到大多数日志。
在Mac / Linux上,您可以使用以下命令在本地保存logcat:
adb logcat -v long >> /tmp/logcat.txt &
然后检查它:
tail -f /tmp/logcat.txt
grep <some_regex> /tmp/logcat.txt
如果您发现某个应用正在生成大量日志,您可以考虑禁用或卸载该应用,看看是否有帮助。
要研究的其他一些工具:
参考
答案 1 :(得分:0)
这绝对是一个错误。
重新启动后,一切都会再次运作。
这种情况的一般建议是重启adb。我使用以下命令:
sudo env PATH=$PATH adb kill-server && sudo env PATH=$PATH adb devices
你可以使用别名来缩短它:
alias adbrestart='sudo env PATH=$PATH adb kill-server && sudo env PATH=$PATH adb devices'