android logging 机制及优化

来源:互联网 发布:vb自动处理网页弹框 编辑:程序博客网 时间:2024/06/05 18:31


基于android 5.0分析


  • 用户空间 Java:
                frameworks/base/core/java/android/util/Log.java


  • 用户空间native
http://androidxref.com/5.0.0_r2/xref/frameworks/base/core/jni/android_util_Log.cpp
android_util_Log_println_native -> __android_log_buf_write -> write_to_log(in liblog.so)

  • liblog.so
http://androidxref.com/5.0.0_r2/xref/system/core/liblog/

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
http://androidxref.com/kernel_2.6.39/xref/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/....

http://blog.csdn.net/luoshengyang/article/details/6595744

  • logcat
source code:
http://androidxref.com/5.0.0_r2/xref/system/core/logcat/logcat.cpp

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:
                frameworks/base/core/java/android/util/Log.java


  • 用户空间native
http://androidxref.com/5.0.0_r2/xref/frameworks/base/core/jni/android_util_Log.cpp
android_util_Log_println_native -> __android_log_buf_write -> write_to_log(in liblog.so)

  • liblog.so
http://androidxref.com/5.0.0_r2/xref/system/core/liblog/

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
http://androidxref.com/kernel_2.6.39/xref/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/....

http://blog.csdn.net/luoshengyang/article/details/6595744

  • logcat
source code:
http://androidxref.com/5.0.0_r2/xref/system/core/logcat/logcat.cpp

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发生的类。
0 0