Android日志系统分析之开篇

来源:互联网 发布:我的吸血鬼男友网络剧 编辑:程序博客网 时间:2024/05/21 09:19

android系统中, 提供了一个轻量级的日志系统。该日志系统基于在内核中实现的一个字符设备驱动

logger(misc字符设备驱动)。通过该字符设备驱动,android分别提供了C/C++Java层的日志输出函数接口。

Java接口主要分布在android.util.Log类中。

其中它信赖的JNI层实现文件位于frameworks/base/core/jni/android_util_Log.cpp文件中。

调用路径如下:

android_util_Log_println_native(Log.java中的本地方法println_native

)>__android_log_buf_write(system/core/liblog/logd_write.c)>write_to_log(它是一个

函数指针,初始值设为__write_to_log_init, 之后其值为__write_to_log_kernel)

__write_to_log_kernel函数中, 将相应的日志信息写入到对应的字符设备中定义的环形缓冲区中。在

C/C++程序中,可以通过__android_log_buf_print(该函数信赖__android_log_buf_write函数)来输出日

志信息,当然我们也可以通过log.h(frameworks/base/include/utils/log.h也即system/core

/include/log.h)中定义的一些宏来输出日志信息。

Android日志系统中信赖的字符设备驱动文件位于kernel/common/drivers/staging/android/logger.h

kernel/common/drivers/staging/android/logger.c中。

andriod日志系统中,对日志信息内容进行了分类,主要分为三类:1.radio-related信息。 2.系统/硬件事

件信息。 3.除上述二类的其他任何信息。在驱动中分别创建了三个不同的字符设备与它们相对应:

此外, android系统中还提供了一个称为logcat的命令来作为一种调试辅助工具,其实现为系统中的一个命令,也是依赖于底层定

义的设备驱动。