android logcat 记录聊天模块行过期消息
Posted
技术标签:
【中文标题】android logcat 记录聊天模块行过期消息【英文标题】:android logcat logs chatty module line expire message 【发布时间】:2016-01-04 08:35:51 【问题描述】:我收到很多与我的应用程序相关的此类 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
【参考方案1】:
我想添加另一个答案,因为现有答案都没有真正回答“我在这里错过了我的实际应用程序 logcat 日志吗?”问题。
是的,你错过了日志。只要应用程序被 logcat 认为是“聊天”(每秒超过 5 行),你的应用程序的日志就会折叠起来。
您可以通过将您的应用列入 logcat 的白名单来避免这种行为:
adb logcat -P '<pid or uid of your app>'
可以通过执行打印当前的白名单和黑名单:
adb logcat -p
此命令还有助于打印 logcat 统计信息:
adb logcat -S
此外,我发现在测试期间直接从代码中为 logcat 自动将我的应用程序自动列入白名单很有用:
int pid = android.os.Process.myPid();
String whiteList = "logcat -P '" + pid + "'";
Runtime.getRuntime().exec(whiteList).waitFor();
更多信息可以在logcathere的官方文档中找到
【讨论】:
@lorenzo-sadb logcat -p
和 adb logcat -S
的输出是什么?
adb logcat -p
打印我的应用程序 PID,即我在 adb logcat -P 'pid'
中使用的那个,与我在 Studio 的 Android Monitor logcat 下拉列表中看到的相同。而here is 的输出为adb logcat -S
我在Chattiest UIDs in main log buffer:
部分中并没有真正看到您的应用程序。你确定你的应用被认为是健谈的吗?
是的,我经常在 logcat 中收到 chatty
消息,表示已跳过行。你看不到它,因为它可能是一个新的开始,我只运行该命令来向你发送输出。 Here is 打印一些闲聊消息后的相同日志,我的应用程序是 PID 11432 的应用程序,与 adb logcat -p
看到的相同
在使用 adb 从命令行执行此操作时,这对我来说效果很好,但从应用程序以编程方式执行时,它似乎不起作用。无论使用 uid、pid 还是 uid/pid,它每次都会返回退出代码 1,并且 adb logcat -p 反映的列表不显示应用程序。我建议只使用第三方日志框架,例如 log4j。【参考方案2】:
是的,这表明某些消息没有进入实际日志,可能是因为其他应用程序向其中发送了太多消息。
这似乎是 Marshmallow(?) 中 liblog 中的新事物。找不到对新日志记录策略的明确解释,或者即使实际上有一个,但在here 中提到了更改:
一旦记录超过 5 个,我们就宣布应用程序过于健谈 一秒钟。请向应用程序的所有者提交一个错误,该错误 正在生成此开发人员详细调试级别的类日志记录垃圾邮件。日志 是 256KB,这意味着应用程序正在创建 DOS 攻击,并且 将日志时间跨度缩短到 6 秒(!),使其对所有其他人毫无用处。
【讨论】:
我看到很多com.google.android.gms.persistent
... 我应该向 Google 提交错误吗? :-D
另外,我经常看到它说“过期 1 行”……这怎么太啰嗦了?
我收集了 5-10 秒的日志,结果是来自 chatty 的 261 个日志条目,所以应该填补 bug,因为 chatty 太健谈了:D
如何在 IDE 上禁用此功能?【参考方案3】:
您可以使用以下方法禁用此行为:
adb logcat -P ""
或通过设置
setprop ro.logd.filter disable
setprop persist.logd.filter disable
您可以在
查看代码http://androidxref.com/7.1.2_r36/xref/system/core/logd/LogWhiteBlackList.cpp
【讨论】:
这些属性似乎并没有完全禁用它,但我认为如果您直接链接到 liblog 会有所帮助。 这是正确答案,投票给它,希望有一天它不是列表中的最后一个。 我在 Android 8.1 上使用了setprop persist.logd.filter disable
,然后重新启动,但我仍然看到chatty ... identical
行。 identical
是否意味着消息仍然被丢弃?
@zoulou 好吧,如果这些日志相同,那么除了这些相同日志的时间戳之外,您基本上不会错过任何其他内容【参考方案4】:
您可以使用以下方法禁用此行为:
adb logcat -P ""
【讨论】:
我们怎样才能重新打开它?这在任何地方都有记录吗? @nealmcb 我不认为你可以永远禁用它。这些东西总是暂时的,对吧? @milosmns 那么它会持续多久?直到重新启动? @nealmcb 在我的 6P 上它只是刷新日志并退出 我没有收到任何错误消息。在执行此命令 adb logcat -P "" 之后,它不会禁用聊天。我尝试提及我的应用程序的 UID/PID,它被列入白名单,但仍然健谈并没有被禁用。我的设备是一加5【参考方案5】:首先执行adb logcat -S
以检查您的应用程序是否在最聊天的 UID/PID 下。
如果有,请执行以下命令将您的应用程序列入白名单
adb logcat -P "UID/PID"
要检查所有列入白名单/黑名单的应用程序,请执行以下命令
adb logcat -p
【讨论】:
以上是关于android logcat 记录聊天模块行过期消息的主要内容,如果未能解决你的问题,请参考以下文章
android studio 中 adb logcat 在这里敲
如何在 Windows 中轻松查看和过滤 Android 的 logcat?