作者:华清远见讲师

  日志是故障处理最重要的部分,但是它难以实现,特别是在那些使用两个不同机器进行开发和执行的移动平台上。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头文件中声明,

  支持的日志优先级

  typedef enmu android_LogPriority

  {

  ANDROID_LOG_VERBOSE,

  ANDROID_LOG_DEBUG,

  ANDROID_LOG_INFO,

  ANDROID_LOG_WARN,

  ANDROID_LOG_ERROR

  ANDROID_LOG_FATAL,

  }android_LogPriority;

  生成简单的日志消息

  _android_log_write(ANDROID_LOG_WARN,"hello-jni","warning log.");

  生成格式化的日志消息

  _android_log_print(ANDROID_LOG_ERROR,"hello-jni",

  "Failed with errno %d",erron);

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

  3、_android_log_vprint:粗糊了参数传递方式外,其他功能与_android_log_print 函数完全相同,_android_log_vprint函数用va_list传递附加参数,而_android_log_print函数中以连续参数的凡是改为传递参数,如果想要调用日志函数时传递给当前函数的参数个数动态变化时,该函数的优势就会体现出来。

  void log_verbose(const char* format,...)

  {

  va_list args;

  va_start(args,format);

  _android_log_vprint(ANDROID_LOG_VERBOSS,"hello-jni",format,args);

  va_end(args);

  }

  void example()

  {

  log_verbose("Error is now %d",error);

  }

 

  >>>更多优秀技术博文尽在华清远见嵌入式学院


更多相关文章

  1. Android第二十一课 Jni日志打印以及注意事项
  2. android 测试读取LEB数据的函数
  3. Android 日志工具类
  4. Android adb 下 am broadcast -a发送信息详解
  5. android生命周期函数大全——亲测
  6. Android 显示网络信息 ConnectivityManager用法
  7. Android设备系统及屏幕分辨率统计信息汇总(截至2018年7月)

随机推荐

  1. 小白如何人体结构?漫画人体结构绘画入门
  2. 用Python复现二战德军enigma密码机
  3. 基于PyQt5制作Excel数据分组汇总器
  4. javascript中的json,XHR与Fetch
  5. 详解Python操作Excel之openpyxl
  6. 一个登录框 + 用JS取表单中的元素
  7. JavaScript实现滑块验证案例
  8. 用python实现超强的加密软件
  9. C#中调用MySQL存储过程的方法
  10. table课程表,用户注册模板,内联框架实现后