如何在安卓系统中修改logcat缓冲区大小?

40

我注意到logcat缓冲区的大小在不同的设备上会有所不同。假设我在我的设备上拥有root权限,那么是否有一种方法可以在运行时更改主缓冲区的缓冲区大小?如果不行,那么假设我可以重新构建Android映像,如何在编译时更改它?我想要将其扩大以进行诊断目的。


优秀的文档在http://elinux.org/Android_logger。 - pevik
8个回答

24
###查看当前缓冲区大小
adb logcat -g

###设置所有类型的缓冲区大小(主要、系统、崩溃)
adb logcat -G 16M # 16M can be replace by (128K ~ 16M)

###设置特定类型的缓冲区大小(主要、系统、崩溃)
adb logcat -b system -G 8M # system can be replaced with 'main' or 'crash'

我刚刚尝试了“-G 20M”,似乎也适用? - Yoav Feuerstein
@YoavFeuerstein 一些制造商/操作系统可能会覆盖这些标准,因此可能会存在例外情况。 - Sazzad Hissain Khan
你的情况就是这种偏差的例子。 - Sazzad Hissain Khan
我注意到当我使用adb logcat -G更改缓冲区大小时,它在设备重启后不会保存更改,并且开发人员选项屏幕仍然显示旧设置。有任何想法为什么? - Holistic Developer
1
在 https://dev59.com/32015IYBdhLWcg3w6QDA#57657874 找到了我的答案。引导选项基于属性 persist.logd.size - Holistic Developer
显示剩余2条评论

23

"开发者选项"中的"日志缓冲区大小选项"

它允许将大小更改为64k到16M之间的几个值。

adb logcat -g 然后立即显示更新限制。

在5.1.1上进行了测试,并且这个答案声称它是最近添加的。


刚刚发现这个! - Pär Nils Amsen

17

设置日志环形缓冲区的大小

adb logcat -G <size> 

将 K 或 M 添加在数字后面以表示千字节或兆字节

例如:adb logcat -G 512K


9
根据新闻组Android Developers的消息,logcat缓冲区大小如下:
设备上的日志缓冲区为64KB。时间戳、进程ID和日志级别以紧凑格式存储,因此您实际上可以从logcat -d -v <mode>中获取超过64KB的格式化数据。

1
缓冲区大小需要更新吗?当我运行adb logcat -g来检查缓冲区信息时,得到了256Kb。 - hackjutsu
1
@Cosmoandcat,该数字在Android 2.4及以下版本中是准确的。您可能正在使用Android 4.x。尺寸在3.0中增加了。这是更新的性质。 - cde
如果您想为特定的缓冲区类型设置大小,请参见答案https://dev59.com/jWct5IYBdhLWcg3wCZIT#56730011 - Sazzad Hissain Khan

3

缓冲区大小由内核确定,可以在*/drivers/staging/android/logger.c中找到。

使用的缓冲区及其大小随着Android版本的变化而改变。 Android 3.0(蜂巢)及更高版本还具有系统缓冲区,所有四个缓冲区大小为256 KB。更改缓冲区大小需要重新编译内核。


3
不可以,根据这里的说法,设备上的日志缓冲区为64KB。时间戳、进程ID和日志级别以紧凑格式存储,因此您实际上可能会从logcat -d -v <mode>中获得更多于64KB的格式化数据。
另请参见Stack Overflow问题“Logcat的大小限制是多少?”
无论如何,要将日志保存在其他位置,您可以使用读取和写入日志。也许那能帮到您。

0

你可以在属性文件android-studio\bin\idea.properties中增加idea.cycle.buffer.size=1024的值。这对我有用。


0

通过adb为特定的Android设备设置logcat缓冲区为16Mb,我使用了以下命令:

adb -s 2615a1d4e3174a6e logcat -G 16M

但你也可以只使用以下命令:

adb logcat -G 16M

或者使用以下命令来设置先前的缓冲区大小:

adb logcat -G 256K


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