解读Android LOG机制的实现:(1)LOG的实现架构
田海立@CSDN
2011/07/24
Android提供了用户级轻量的LOG机制,它的实现贯穿了Java,JNI,本地c/c++实现以及LINUX内核驱动等Android的各个层次,而且足够简单清晰,是一个相当不错的解读案例。本系列文章针对LOG机制的内部实现机理进行解读,本文是系列的第一篇,解读LOG机制的实现架构。
LOG的运行环境
下图是Android官方网站上给出的Android的Debug环境。
Android的LOG机制当然也在这个环境中运行。我们重点关注Emulator和Device上运行的部分,App VMs产生LOG信息,并与ADB Device Daemon交互输出这些信息,而ADB Device Daemon又通过相应的协议通过USB(Device)或本地连接(Emulator),与PC上运行的ADB Host Daemon交互,通过PC上的调试工具呈现给用户。JDWP Debugger、DDMS、ADB Host Daemon以及ADB Device Daemon之间的交互与其使用的协议,不在本文讨论范围之内。本文讨论的内容运行在Emulator/Device上,产生LOG信息,并通过程序LogCat输出。
LOG的实现架构
Android中LOG的实现架构如下图所示,这基本上也是Android的某个模块实现各个层次的经典架构。
Android应用程序通过Framework提供的机制操作;Java领域需要本地c/c++提供服务的地方,通过JNI实现;JNI调用底层库;库函数通过操作映射的设备文件操作设备,LINUX kernel中的Driver完成相应的操作。另外,抛开Java和JNI,LINUX上用户域的c/c++程序,也可以通过操作设备文件来完成。
Android的LOG也是这样实现的,并将在本系列文章中分别讲述。应用程序通过android.util.Log里的各种静态方法,输出LOG信息[系列之二中具体讲述];Log通过JNI接口调用c/c++的实现,而本地实现的写LOG,也基本就是写信息到设备文件[系列之三中具体讲述];设备文件是Android为了LOG机制而写的LINUX的一个轻量级的驱动logger[系列之四中具体讲述];LOG信息的显示可以是Emulator/Device上运行的LogCat程序[系列之五中具体讲述];另外,Android的本地实现库也可利用现有机制,在c/c++的空间 直接输出LOG[系列之六中具体讲述]。
【本系列文章】
解读Android LOG机制的实现:(1)LOG的实现架构
解读LOG机制的实现架构。
解读Android LOG机制的实现:(2)Java域输出LOG
解读Android的Java程序中如何输出LOG信息到LOG的体系中。
解读Android LOG机制的实现:(3)JNI及NATIVE域写设备文件
解读android.util.Log的JNI实现,以及在c/c++的本地实现中如何操作设备文件写Log信息。
解读Android LOG机制的实现:(4)LOG设备驱动logger
解读LINUX内核中的设备驱动Logger中实现。Logger是Android为Linux写的一个MISC类型驱动,用循环队列实现了读者/写者。Logger是整个LOG机制实现的核心。
解读Android LOG机制的实现:(5)获取LOG程序LogCat
解读应用程序LogCat如何通过对设备文件的open()/select()/read()来获取LOG信息。
解读Android LOG机制的实现:(6)c/c++域使用LOG
解读Android的c/c++程序中如何使用LOG机制记录LOG信息。
分享到:
相关推荐
对想深入研究Android中Log的实现机制的同志有用,在此分享给大家
android.util.Log is the most usable library of the Android. But, when the app released on the market, some important information is clearly forgotten by the developer. All logs are disabled by Debug...
解决log4j:ERROR Failed to rename, win系统占用文件无法改名字的问题
在Tomcat6下使用Log4j记录日志,天创建新日志文件时(日志文件设置为:org.apache.log4j.DailyRollingFileAppender)报: log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以...
log4j:ERROR Failed to rename错误解决办法 http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html
一个收集 app 输出日志的工具,输出文件:模拟器是 /sdcard/Android/data/项目包名/cache/,真机是 /Android/data/项目包名/cache/,里面的 crash 目录是崩溃日志,log 目录是 logcat 日志。 如何使用 在 module ...
log4j:ERROR Failed to rename
在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的。通过kernel–>vold–>StorageManagerService这样的... setenv(ANDROID_LOG_TAGS, *:v, 1); android::base::InitLogging(argv, android::base::LogdLogger
Log4a is an mmap based, high-performance, highly available Android log collection framework | Log4a 是一个基于 mmap, 高性能、高可用的 Android 日志收集框架
1: Initialization FileLogUtils.init (Context); 2: Use FileLogUtils.write (your Log information); Log File Path: If the SD card or external memory exists, the SD Android data package name files Log ...
android自定义log日志输出工具,该工具类具有以下优点: 1 在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,”这是一个实用的日志...
分析从库1062问题,解析从库binlog日志,报错如下[root@xxxdb0402 tmp]# mysqlbinlog mysql-bin....# grep ‘rding’ 4.log > rd4.log[root@xxxdb0402 tmp]# ll rd4.log-rw-r–r– 1 root root 0 Sep 3 17:50 rd4.log空
一个类实现更实用的 Android Log 工具 —— 1 个类,100 个方法、9 KiB
Log已经实现 Log已经实现 Log已经实现 Log已经实现 Log已经实现
Graylog client for Android devices Graylog is a rsyslog web interface based on Ruby On Rails: http://github.com/lennartkoopmann/Graylog Watch your favorite errors now mobile on your android device! :)...
Android显示Log信息(带行号),非常好用的Android工具类!
android log 查看工具,告别 adb logcat ,对log分析henyou希望能帮助到大家,谢谢!!!
android 下方便的打印log 在sd上写入log
自定义android Log类,请参看我的blog
Android log4j使用DemoAndroid log4j使用DemoAndroid log4j使用DemoAndroid log4j使用Demo