在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的命令来作为一种调试辅助工具,其实现为系统中的一个命令,也是依赖于底层定
义的设备驱动。