android logging 机制及优化

本文深入探讨了Android 5.0中的日志机制,包括用户空间的Java层和Native层,详细分析了liblog.so库、logd服务、设备接口以及logcat工具的工作原理。同时,还讨论了日志格式的优化策略,以提升系统效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


基于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_readThe 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_readThe 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发生的类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值