日志是故障处理最重要的部分,但是它难以实现,特别是在那些使用两个不同机器进行开发和执行的移动平台上。Android有一个扩展日志框架,用于对系统范围内Android系统本身的信息及应用程序的信息集中做日志。它还提供了一组用户级应用程序以查看和过滤这些日志。

  Android 日志框架是名字为logger的内核模块。随时随地地对平台上的任何信息进行日志会产生大量信息,从而使得查看和分析这些日志变得非常困难。为了简化这个过程,Android日志框架把日志消息分成4个日志缓冲区:

  Main 主要应用程序的日志信息

  Event 系统事件

  Radio Radio 相关的日志信息

  System 调试时产生的低级系统调试信息

  这4个缓冲区以伪设备的形式保存在dev/log系统目录下。因为移动平台上的I/O操作代价很大,所以日志信息要保存在内

存中,而不能保存在永久性存储器(例如磁盘中)。为了有效的控制对存储日志信息的保存在内存中

  存储空间的充分利用

  MAIN,RADIO,SYSTEM 64kb

  256KB 的日志缓冲区

  开发者不希望直接与logger内核模块进行交互,Android运行库系统提供了一组API调用以便于java代码和原生代码想logger内核模块发送日志信息。通过android/log.h头文件来展示原生代码的日志API。为了使用日志函数,原生代码需要先向包含该头文件。

  #include

  除了要包含合适的头文件,还需要动态修改Android.mk文件从而将原生模块与日志库进行链接,可以通过使用构建系统变量LOCAL_LDLIBS完成操作,

  LOCAL_LALIBS += -llog

  此语法必须在include前面

  日志消息

  通过日志API发送给logger模块的每个日志条目都具有以下字段:

  Priority:取值分别为verbose,debug,info,warning,error和fatal,表示日志的重要程度,支持的日志优先级在

android/log.h头文件中声明,

  支持的日志优先级

C++代码
  1. typedef enum android_LogPriority  
  2. {  
  3.     ANDROID_LOG_VERBOSE,  
  4.     ANDROID_LOG_DEBUG,  
  5.     ANDROID_LOG_INFO,  
  6.     ANDROID_LOG_WARN,  
  7.     ANDROID_LOG_ERROR  
  8.     ANDROID_LOG_FATAL,  
  9. }android_LogPriority;  

  生成简单的日志消息

C++代码
  1. _android_log_write(ANDROID_LOG_WARN,"hello-jni","warning log.");  

  生成格式化的日志消息

C++代码
  1. _android_log_print(ANDROID_LOG_ERROR,"hello-jni""Failed with errno %d",erron);  

  参数分别是日志优先级,日志标签和日志消息

  _android_log_vprint:粗糊了参数传递方式外,其他功能与_android_log_print 函数完全相同,_android_log_vprint函

数用va_list传递附加参数,而_android_log_print函数中以连续参数的凡是改为传递参数,如果想要调用日志函数时传递给当

前函数的参数个数动态变化时,该函数的优势就会体现出来。

C++代码
  1. void log_verbose(const char* format,...)  
  2. {  
  3.   va_list args;  
  4.   va_start(args,format);  
  5.   _android_log_vprint(ANDROID_LOG_VERBOSS,"hello-jni",format,args);  
  6.   va_end(args);  
  7. }  
  8. void example()  
  9. {  
  10.   log_verbose("Error is now %d",error);  
  11. }  
本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/environment/549.html
2016年3月25日
发布:鸡啄米 分类:Android开发环境 浏览: 评论:0