android 日志方案研究

android Log原理

对于android工程师,可能对于Log底层jni部分细节不需要具体了解,用一张图来了解其实现流程:

Android_Log

这里涉及到三个进程:

APP进程:  调用Log的接口打日志,最终通过soctket通信发送给Logd进程

Logd进程:有一个缓冲区用于存储日志(环形缓冲区,当满时会冲掉旧的日志)

Logcat进程:可以在adb shell中创建(可以创建多个),查看缓冲区中日志的进程(Android Studio的logcat也是一个Logcat进程)。


环形缓冲区是一个逻辑上的循环队列,写者可以往里面写东西,而一旦有内容会通知等待队列里的读者们来读取内容,否则等待队列列处于阻塞状态。 这就意味Logcat进程读取也是阻塞形式的。


基于缓存的日志方案

对于普通应用:实现一套自己的Log,将每次打的日志缓存起来。

对于系统应用:在应用中开启一起Logcat进程,不断的读取Logd进程中的日志到缓存中,当日质量达到一定的阈值后再刷如文件。这种方案可以搜集到所有应用的日志。

缺点:

1. 写文件 + 加密  会出现cpu峰值

2. 崩溃或者进程意外退出 缓存中的日志可能无法刷到文件中,关键崩溃信息可能丢失。


对于智能设备中专门做一个日志进程去搜集所有应用的日志,这种方案其实是简单可行的。


基于共享内存的方案


基于mmp的方案


参考:

https://blog.csdn.net/tencent_bugly/article/details/53157830

http://ju.outofmemory.cn/entry/224106

转载于:https://www.cnblogs.com/NeilZhang/p/11337165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值