基于android 5.0分析
- 用户空间 Java:
fr
ameworks/base/core/java/android/util/Log.java
- 用户空间native
android_util_Log_println_native -> __android_log_buf_write -> write_to_log(in liblog.so)
- liblog.so
ALOG -> LOG_PRI ->android_printLog -> __android_log_print ->__android_log_write -> write_to_log [ __write_to_log_init | __write_to_log_kernel | __write_to_log_null]
__write_to_log_kernel -> writev
liblog.so有两种模式: 使用logd和不使用logd ,在 Android.mk中控制:http://androidxref.com/5.0.0_r2/xref/system/core/liblog/Android.mk![]()
使用logd时,log的读写通过socket_local_client与logd交互,logd负责log的管理维护。不使用logd时,log的读写通过fd读写系统设备/dev/log/.... 实现。
- logd
create local socket and listen on " / dev / socket / logdr " for log reading.create local socket and listen on " / dev / socket / logdw " for log writing.
- device
drivers\staging\android\Logger.c
logger_init -> init_log -> misc_register()
创建设备文件/dev/log/main, /dev/log/system, /dev/log/radio, /dev/log/events
logger_read/logger_aio_write/logger_open/logger_ioctl/....
- logcat
source code:
android_logger_open / android_logger_list_read, The functions are implemented in liblog.so.
- log格式优化
使用android.util.Log相应函数输出的log格式如下:
V/AwesomePlayer( 2346): cancelPlayerEvents (keepNotifications=0)
仅包含log等级,log tag,processid, log message. 为了便于程序执行流程跟踪、问题调试,在。。。提供了一种更详细的log格式,示例如下:
D/JobTest::Java::TestService(22952): 2015/09/07 17:14:29.378000 GMT+08:00 1 [DEBUG] [com.test.polltest1.service.TestService] Start Job (Android)
添加log发生的timestamp, log发生的线程号,log发生的类。
- 用户空间 Java:
fr
ameworks/base/core/java/android/util/Log.java
- 用户空间native
android_util_Log_println_native -> __android_log_buf_write -> write_to_log(in liblog.so)
- liblog.so
ALOG -> LOG_PRI ->android_printLog -> __android_log_print ->__android_log_write -> write_to_log [ __write_to_log_init | __write_to_log_kernel | __write_to_log_null]
__write_to_log_kernel -> writev
liblog.so有两种模式: 使用logd和不使用logd ,在 Android.mk中控制:http://androidxref.com/5.0.0_r2/xref/system/core/liblog/Android.mk![]()
使用logd时,log的读写通过socket_local_client与logd交互,logd负责log的管理维护。不使用logd时,log的读写通过fd读写系统设备/dev/log/.... 实现。
- logd
create local socket and listen on " / dev / socket / logdr " for log reading.create local socket and listen on " / dev / socket / logdw " for log writing.
- device
drivers\staging\android\Logger.c
logger_init -> init_log -> misc_register()
创建设备文件/dev/log/main, /dev/log/system, /dev/log/radio, /dev/log/events
logger_read/logger_aio_write/logger_open/logger_ioctl/....
- logcat
source code:
android_logger_open / android_logger_list_read, The functions are implemented in liblog.so.
- log格式优化
使用android.util.Log相应函数输出的log格式如下:
V/AwesomePlayer( 2346): cancelPlayerEvents (keepNotifications=0)
仅包含log等级,log tag,processid, log message. 为了便于程序执行流程跟踪、问题调试,在。。。提供了一种更详细的log格式,示例如下:
D/JobTest::Java::TestService(22952): 2015/09/07 17:14:29.378000 GMT+08:00 1 [DEBUG] [com.test.polltest1.service.TestService] Start Job (Android)
添加log发生的timestamp, log发生的线程号,log发生的类。