android logger自发降低其详细程度(不是Eclipse)

时间:2014-05-21 07:06:40

标签: android logcat

接受的答案:

  • 这是一个已知的错误(网址)
  • 这是一个功能(网址)

我无法弄清楚它是否是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

2 个答案:

答案 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'