在命令行上过滤Logcat日志

45
public static final TAG = "Legendry Eagle";

问题:我想从命令行查看"传奇老鹰"的日志。

我尝试过:

 adb logcat -s "Legendry Eagle" 
 adb logcat -s <Legendry Eagle>

但仍然不起作用。


离题:为什么你在调试时使用DOS提示符而不是Eclipse?或者你没有在调试吗? - RvdK
使用这个链接可以帮助你,它告诉你如何通过应用程序过滤Android的Logcat。 - Aamir Shah
2
你确定你没有在命令中拼错标签吗?也许你的项目实际上使用的是“传奇之鹰”,但你正在搜索“传说之鹰”(或反之亦然)。 - Aleks G
1
文档中说“规范系列以空格分隔。”因此,如果您尝试按标签进行过滤,则不能在标签中使用空格。 - Tony Chan
6个回答

70

如果您只想显示特定标签的logcat,请按照以下方式进行:

adb logcat YourTAGHere:Priority *:S

*:S 是重要的,因为它将所有其他标记设置为静音。如果我只想以详细级别跟踪我的MainActivity标记,则语法应如下所示。

adb logcat MainActivity:V *:S

编辑:我没有找到有效过滤带空格标签的方法。LegendryEagle 运行良好,但我无法过滤掉 Legendry Eagle


2
文档中说:“规范系列以空格分隔。”这可能是为什么他的“传奇之鹰”标签无法过滤的原因。 - Tony Chan
+1 对于 *:S 的解释非常清晰,现在我知道如何使用选项了。 - Marcelo
规范系列以空格为分隔符,因为你在Windows命令提示符上,所以当你在Windows命令提示符上时,可以用双引号包围使用空格的参数,即"White Space Parameter"来转义它们。想想move "c:\android files" "c:\my code\android files"。这意味着你应该能够做到:adb logcat "Legendary Eagle:Priority" *:S。我无法确认确切的情况,因为我没有任何使用空格的标签进行测试,但是这个命令可行:adb logcat "StatusBarManagerService:V" *:S,这告诉我它是在Windows上而不是adb。 - Neptune Systems
1
@NeptuneSystems 即使只使用双引号,adb 仍然只使用第一个单词来过滤输出。如果您想要过滤包含空格的字符串,Aleks G 的答案 提供了一种解决方案。 - Ole
*:S 很重要,因为它将所有其他标记设置为静音。 - Matthias R.
你可以使用-s选项代替*:S,这种情况下应该是"adb logcat -s MainActivity:V"。 - Eneko

22
如果标准的 adb logcat -s 标签名称 无法使用,你可以将 adb 的输出导入到 find 中进行过滤,例如:

adb logcat | find "关键词"

adb logcat | find "Legendry Eagle"

该命令将整个Logcat传递给DOS的find命令,然后该命令会过滤掉包含Legendry Eagle字符串的行。


1
扩展程序“find xyz”也解决了我的问题,谢谢!(这是互联网上只有进行一小时的全面研究才能发现的最小提示) - Matthias R.
这解决了我的问题。*:S 和 -s 的方法可能已经过时了。 - Stewii

15
adb logcat | grep "your tag"

只会显示带有“your tag”的日志


5
答案很简单。请去掉两个单词之间的空格,然后再试一次。
 public static final TAG = "LegendryEagle";
 adb logcat -s "LegendryEagle" 

查看logcat。你就能得到答案。


3
网页视图记录所有 console.log 到 "Web Console",因此这并没有真正帮助。 - TheHippo

2

0
假设您正在使用Eagle作为日志标记,请使用以下命令:
adb logcat Eagle:* *:s
据我所知,Eagle:* 表示打开Eagle标记的所有日志记录,而*:s 表示使所有其他标记静音。
个人认为,与命令行相比,我更喜欢使用eclipse logcat视图,它具有不同级别日志的不同颜色,并且您可以创建并保存过滤器,直到您删除该过滤器。

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