概述
平常用logcat看日志或copy日志,实际是在logcat的一个可视化窗口上进行简单的read和copy,这个窗口是由logcat工具支撑的,并不是logcat的全部。
Android 日志记录系统是系统进程 logd 维护的一组结构化环形缓冲区。这组可用的缓冲区是固定的,并由系统定义。最相关的缓冲区为:main(用于存储大多数应用日志)、system(用于存储源自 Android 操作系统的消息)和 crash(用于存储崩溃日志)。每个日志条目都包含一个优先级、一个标识日志来源的标记以及实际的日志消息。优先级从最低到最高为:
V:Verbose (最低优先级)D:DebugI:InfoW:WarnE:ErrorF:FatalS:Silent (静默,最高优先级,绝不会输出任何内容)
日志记录系统的主接口是共享库 liblog 及其头文件 <android/log.h>。所有语言特定的日志记录工具最终都会调用函数__android_log_write。默认情况下,它会调用函数 __android_log_logd_logger,该函数使用套接字将日志条目发送到 logd。从 API 级别 30 开始,可通过调用 __android_set_log_writer 更改日志记录函数。
运行 adb logcat 显示的日志要经过四个级别的过滤:
- 编译时过滤:根据编译设置,某些日志可能会从二进制文件中完全移除。例如,可以将 ProGuard 配置为从 Java 代码中移除对
Log.d的调用。 - 系统属性过滤:
liblog会查询一组系统属性以确定要发送到 logd 的最低严重级别。如果日志具有 MyApp 标记,系统会检查以下属性,并且日志应包含最低严重级别的第一个字母(V、D、I、W、E 或 S 以停用所有日志):
log.tag.MyApp
persist.log.tag.MyApp`
`

本文详细介绍了Android的日志系统,重点解析了adb logcat的使用,包括一般用法、命令行选项和过滤表达式的应用,帮助开发者更高效地分析和过滤日志。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



