背景
通常在Android中使用logcat
输出查阅日志,但有时日志很长,可能会被截断,显示不完整。
注意,这里指的是单条日志太长了被截断了,不是指日志太多了被冲掉了
本文研究日志被截断的原因,并给出修改方法。
首先日志被截断的原因有如下几种,其中第一种是首要原因:
- 单条日志长度上限,日志如果太长,触及上限则会被截断
- 日志如果涉及序列化、binder传输,则受到binder传输上限的限制
- 底层(Linux、log设备)限制、系统调用限制
注意,单条日志长度上限是指一次打印的日志的长度,不是指设置-开发者选项-日志缓冲区大小。
查看日志缓冲区大小、单条日志大小
#:/ logcat -g
main: ring buffer is 16 MiB (15 MiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 16 MiB (6 MiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 16 MiB (13 KiB consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 16 MiB (3 MiB consumed), max entry is 5120 B, max payload is 4068 B
通过logcat -g
指令可以读到各个分类的缓冲区上限、目前用量、每次读取量、单条日志长度的上限。
调节日志缓冲区大小
- 法1: 开发者模式-设置日志缓冲区大小
- 法2: 通过
logcat -G
即可设置,等同于法1
调节单条日志大小
修改代码根目录下的system/core/liblog/include/log/log_read.h
下的LOGGER_ENTRY_MAX_PAYLOAD
和LOGGER_ENTRY_MAX_LEN
。
修改后,需要重新编译如下三个模块: liblog logd logcat
,推入设备,重启方能生效。(通过logcat -g
可以验证修改)
不同Android版本在不同位置,比如这个。