进程Log过多,超过上限,导致log被删除,类似:
chatty : uid=1000(system) MountService expire 168 lines
logd 删除log的判断依据为:
查看代码,logd 的判断是否删除的依据为:
void LogBuffer::maybePrune(log_id_t id) {
size_t sizes = stats.sizes(id); //获取指定buffer ,在内存中log的总大小,
unsigned long maxSize = log_buffer_size(id); //获取此 buffer的先限制大小。
if (sizes > maxSize) {
。。。。。。
if (pruneRows <= minElements) {
pruneRows = minElements;
}
if (pruneRows > 256) {
pruneRows = 256;
}
prune(id, pruneRows);
}
}
Logd 获取当前buffer缓存的log大小,与其设定的 buffer相比,如果sizes >maxSize 则进行删除操作, 删除当前log个数的1/10 ~~256 个,删除log的判断依据maxSize, 是在 LogBuffer::init()方法中进行设置的,默认大小为 LOG_BUFFER_SIZE (256 * 1024)
在android 原生中扩大 log buffer 的方法有两种:
1、通过adb 命令,动态修改指定的bufer 大小如图:
android 默认7个buffer 的值都为:256*1024
通过运行命令 :adb logcat -b buffer_name -Gsize, 来扩大指定 buffer 的值,例如:
2、 通过修改build.prop ,也可以达到修改buffer 大小的目的,但是需要 重启生效。
可以将命令 整合到一个工具apk 中,以列表的方式展现所有buffer,手工去调正 指定buffer的大小。
备注:
buffer 的有效值位于:
LOG_BUFFER_MIN_SIZE (64 * 1024UL) ~~~~ LOG_BUFFER_MAX_SIZE (256 * 1024 * 1024UL)
如果设置的值,大于或小于有效值,那么设置不生效。