Android日志记录器(logcat)中的“chatty”模块行过期消息。

85

我收到了很多与我的应用程序相关的这种logcat信息。

11-19 19:04:23.872 3327 3440 I chatty : uid=10085 com.xxxx.yyy expire 18 lines

这些日志消息是什么? 我是否错过了真正的应用程序logcat日志?


我也收到了这些信息,虽然我的应用程序运行良好,但我很想知道它们的含义。我猜测这与日志记录有关? 01-22 16:04:14.256 2398 2398 I chatty : uid=10126(be.xxx.yyyyyyyyyy) expire 11 lines - Fugue
5个回答

86

我想补充一下答案,因为现有的答案都没有回答“我是不是错过了我的实际应用程序logcat日志?”这个问题。

是的,你错过了日志。 一旦应用程序被logcat视为“喋喋不休”(每秒5行以上),应用程序的日志将被折叠。

您可以通过为logcat设置一个白名单来避免这种行为:

adb logcat -P '<您的应用程序的pid或uid>'

您可以执行以下命令打印当前的白名单和黑名单:

adb logcat -p

此外,在测试期间,从代码中自动为logcat设置我的应用程序的白名单也很有用:

int pid = android.os.Process.myPid();
String whiteList = "logcat -P '" + pid + "'";
Runtime.getRuntime().exec(whiteList).waitFor();

更多信息可以在logcat的官方文档这里找到。


@lorenzo-s 你的 adb logcat -padb logcat -S 的输出是什么? - Anton Malmygin
adb logcat -p prints my app PID, i.e. the one I used in adb logcat -P 'pid', the same I see in Studio's Android Monitor logcat dropdown. And here is the output for adb logcat -S - lorenzo-s
我并没有在“主日志缓冲区中最热门的UID”部分看到你的应用程序。你确定你的应用程序被认为是喋喋不休的吗? - Anton Malmygin
我也尝试了UID 10077。我会尝试重新启动,谢谢。 - lorenzo-s
1
当我使用adb从命令行执行时,这对我来说很好用,但是当我从应用程序中以编程方式执行时,它似乎不起作用。每次都返回退出代码1,无论是使用uid、pid还是uid/pid,并且通过adb logcat -p反映的列表不显示该应用程序。我建议只使用第三方日志框架,例如log4j。 - Thomas Sunderland
显示剩余3条评论

46

是的,这表明一些消息没有被记录在实际日志中,可能是因为其他应用向其发送了太多消息。

这似乎是Marshmallow中liblog的一个新变化(?)。找不到关于新日志策略的清晰解释,甚至不确定是否有一个新策略,但这个变化在这里有所提及:here

我们声明一个应用程序在每秒记录超过5行日志时为过于冗杂。请向产生此开发人员-详细-debug级别类日志垃圾邮件的应用程序所有者提交错误报告。日志文件大小为256KB,这意味着该应用程序正在创建DOS攻击并将日志时间缩短到6秒(!)以使其对所有其他用户无用。


29
我经常在“com.google.android.gms.persistent”上看到这个问题...我应该向Google提交一个错误报告吗?:-D - Michael
7
还有,我经常看到它说“过期1行”...这也太啰嗦了吧? - Michael
10
我花了5-10秒钟收集日志,结果从Chatty中获得了261个日志条目,因此应该提交错误报告,因为Chatty太啰嗦了:D - LLL
5
我该如何在IDE上禁用它? - android developer

16

这些属性似乎并不能完全禁用它,但如果您直接链接到liblog,则可能会有所帮助。 - Chef Pharaoh
这是正确的答案,投票支持它,希望有一天它不再是列表中的最后一个。 - satur9nine
我在Android 8.1上使用了setprop persist.logd.filter disable,然后重新启动,但我仍然看到chatty ... identical行。 identical是指消息仍然被丢弃吗? - zoulou
@zoulou 如果这些日志是相同的,那么你基本上除了这些相同日志的时间戳之外没有遗漏任何东西。 - Risinek

10

您可以通过使用以下方式禁用此行为:

adb logcat -P ""

1
@milosmns 那这个持续多久?直到重启吗? - nealmcb
@nealmcb 在我的6P上,它只会清除日志并退出。 - milosmns
@nealmcb 下次执行 adb logcat 时如果没有使用 -P 选项,你会再次得到缩短的日志。很奇怪这是如何工作的,Chatty 在运行时吞噬了一些行吗? - milosmns
2
我没有收到任何错误消息。在执行 adb logcat -P "" 命令后,它并没有禁用 chatty。我尝试提及我的应用程序的 UID/PID,它被列入白名单,但 chatty 仍未被禁用。我的设备是 OnePlus5。 - srs
@Santosh Salunke 在API 28 Android模拟器上同样如此。 - isabsent
显示剩余3条评论

0

首先执行adb logcat -S检查您的应用程序是否在最繁忙的UID/PID下。

如果是,请通过执行以下命令将其加入白名单

adb logcat -P "UID/PID"

要检查所有已列入白名单/黑名单的应用程序,请执行以下命令

adb logcat -p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接