Android系统有一个日志功能,允许系统从应用程序和系统组件记录信息。这与Linux内核自己的日志系统是分开的,内核使用“dmesg”或“/proc/kmsg”访问。日志系统在内核缓冲区中存储消息。
$ adb shell dmesg > dmesg.txt 内核log
日志系统包括:
用于存储日志消息的内核驱动程序和内核缓冲区。
用于生成日志条目和访问日志消息的C、c++和Java类。
用于查看日志消息的独立程序(logcat)
能够查看和过滤来自主机(通过eclipse或ddms)的日志消息
Linux内核中有4个不同的日志缓冲区,它们为系统的不同部分提供日志记录。访问不同的缓冲区是通过文件系统中的设备节点/dev/log实现。
四个日志缓冲区是:
main—应用程序日志。
events—用于系统事件信息。
radio—无线电广播和电话相关信息。
system—用于低级系统消息和调试的日志。
各部分log抓取方法:
$ adb logcat -d -v time -b "main" > main.txt
$ adb logcat -d -v time -b "system" > system.txt
$ adb logcat -d -v time -b "events" > events.txt
直到2010年,只有前三个日志存在。系统日志被创建是为了将系统消息保存在一个单独的缓冲区中(在“/dev/log/main”之外),这样一个冗长的应用程序就不能超过系统消息并导致它们丢失。
日志中的每个消息都包含一个标记,该标记指示消息来自的系统或应用程序的一部分, 标记包括时间戳、消息日志级别(或由消息表示的事件的优先级)和日志消息本身。
除了“事件”之外,所有日志缓冲区都使用自由格式的文本消息。“事件”缓冲区是一个“二进制”缓冲区,事件消息(和事件参数)以二进制形式存储。这种方式更紧凑,但在从缓冲区读取事件时需要额外处理,比如消息查找数据库,以解码事件字符串。
日志系统自动将带有特定标记的消息路由到radio缓冲区。其他消息被放置到各自的缓冲区中。