Android系统开发中LOG的输出与使用

标签: android 系统 开发 | 发表时间:2013-01-28 09:46 | 作者:andyhuabing
出处:http://blog.csdn.net
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理。


1、linux内核的log输出
   在标准的linux内核开发过程中,使用 printk ,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有
   打印级别且将信息保存到 /proc/kmsg 日志中,使用cat命令查看其信息[cat  /proc/kmsg]
   
#define KERN_EMERG   "<0>"     /* system is unusable           */  
#define KERN_ALERT   "<1>"     /* action must be taken immediately */  
#define KERN_CRIT   "<2>"     /* critical conditions          */  
#deinfe KERN_ERR     "<3>"     /* error conditions         */  
#deinfe KERN_WARNING    "<4>"     /* warning conditions           */  
#deinfe KERN_NOTICE "<5>"     /* normal but significant condition */  
#deinfe KERN_INFO   "<6>"     /* informational            */  
#deinfe KERN_DEBUG   "<7>"     /* debug-level messages         */  

2、android中log输出
Android系统在用户空间中提供了轻量级的logger日志系统,它是在内核中实现的一种设备驱动,与用户空间的logcat工具配合使用能够方便地跟踪调试程序。

Android系统中的C/C++日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别:
/*
* Android log priority values, in ascending priority order.
*/
typedef enum android_LogPriority {
   ANDROID_LOG_UNKNOWN = 0,
   ANDROID_LOG_DEFAULT,    /* only for SetMinPriority() */
   ANDROID_LOG_VERBOSE,
   ANDROID_LOG_DEBUG,
   ANDROID_LOG_INFO,
   ANDROID_LOG_WARN,
   ANDROID_LOG_ERROR,
   ANDROID_LOG_FATAL,
   ANDROID_LOG_SILENT,     /* only for SetMinPriority(); must be last */
} android_LogPriority;


为了使用方便,在system/core/include/cutils/log.h定义了相对应的宏:
#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#define LOGI(...) ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__))
#define LOGW(...) ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
#define LOGE(...) ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))

因为如果需要使用log输出,包含其头文件:#include <cutils/log.h> 并link其动态库:liblog.so 即可
#define LOG_TAG "XX_LOG_TAG" // 这里可以定义其输出的TAG
    #include <cutils/log.h>
   
   JAVA层打印:
   import android.util.Log;


   private static final String TAG = "XX_LOG_TAG";
   Log.e(TAG, "This is the error log printed by Log.i in android user space.");
    
3、盒子上如何获取log
a、进入shell获取log
adb kill-server
adb connect dest-ip
adb shell  【登录shell】
mount -o remount /system /system 【改变权限】
logcat >> 1.log
命令行输入CTRL+C回到cmd命令行,adb pull path/1.log

b、直接在cmd命令行获取log
adb connect 连上后;
adb shell
adb logcat >> path/1.log
操作完毕后
命令行输入CTRL+C回到cmd命令行,adb pull path/1.log

c、在terminal终端直接输出log
回车切到shell
logcat [此时即可看到打印]


4、Eclipse环境下运行(安装了Android插件),那么直接可以在Eclipse就可以查看了

      


5、常用技巧
 1、logcat中会打印 【输出级别 + LOG_TAG名字 + 进程字 + 打印的信息】可以充分利用这些信息分析问题
        I/SystemServer(  939): Activity Manager
I/ActivityManager(  939): Memory class: 96
E/AndroidRuntime(  939): Error reporting WTF

第一列由 Log.i(e/w..决定) 或者 LOGI/LOGE/LOGW...
第二列由 LOG_TAG / TAG(JAVA)中决定,可以对于同一组模块前相同的前缀 [xxx]funtion 这种命名
第三列是系统进程号 getpid() 这值,打印线程值 pthread_slef() 
最后的就是自行增加的打印信息

2、调效效率或者执行时间
1、建议重点的打印增加前缀,方便查找。以[######]
2、直接利用logcat输出时间,调试执行速度,分析效率

  logcat -v time 【Display the date, invocation time, priority/tag, and PID of the originating process.】


作者:andyhuabing 发表于2013-1-28 9:46:08 原文链接
阅读:0 评论:0 查看评论

相关 [android 系统 开发] 推荐:

Mozilla拟开发移动操作系统 将火狐押宝Android

- fid - cnBeta.COM
据国外媒体报道,Mozilla基金会加大了Android版火狐浏览器的开发力度,以进一步提高其性能,降低能耗,使之适合在平板电脑上运行. 另外还在尝试移动操作系统项目Boot to Gecko,旨在打造一款能直接启动到浏览器的手机操作系统.

开发者寄望Android 4.0缓解系统分化问题

- 中雨 - cnBeta.COM
美国IT网站PCWorld今天撰文称,开发者希望最新的“冰淇淋三明治”系统能够从一定程度上缓解Android目前的平台分化问题,并修复一些漏洞.

Android系统开发中LOG的输出与使用

- - CSDN博客推荐文章
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录. 在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用. 在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理. 1、linux内核的log输出.

Android开发Tips

- - CSDN博客推荐文章
欢迎Follow我的 GitHub, 关注我的 CSDN.. 介绍一些, 在Android开发中, 会经常使用的小知识点.. submodule与git可以保持实时同步. 导入, 路径多于一个, 前面不添加冒号(:).. 使用PackageManager.. // 检查App是否安装 private boolean appInstalledOrNot(String uri) {.

Android面临困境:系统现碎片化 开发者兴趣下滑

- - cnBeta全文版
4月22日消息,据国外媒体报道,美国科技博客BusinessInsider今天发表一篇博文,称Android系统的崛起是2011年移动行业的最大事件,但进入2012年后Android系统突然面临着许多麻烦. Android之父安迪・鲁宾. 2011年移动行业的最大事件是Android系统的崛起. 但进入2012年后,该操作系统好像驶入了一段它波涛汹涌的水域,突然面临着许多的麻烦.

苹果MAC操作系统上搭建Android开发平台环境

- - CSDN博客移动开发推荐文章
在MAC中安装并搭建Android开发环境的详细步骤和教程. Android的开发平台搭建主要需要的工具有:Java虚拟机JDK、Eclipse、Eclipse插件ADT(Android Developer Tool)和Android开发包SDK,以下是具体的安装方法. 在MAC中已经为我们预装了JDK并默认配置了Java系统变量,因此JDK对我们来说直接使用即可,查看MAC中的JDK版本方法是在命令行(硬盘/应用程序/实用工具/终端)中输入"java -version"并回车即可.

Android生态系统已经足够庞大,谷歌为何还要从零开发新操作系统

- - 钛媒体:网罗天下创新事
上周,谷歌员工做了一件让人看不明白的事:他们低调地宣布正在开发一款操作系统,从理论上来说,这款操作系统将成为谷歌Android的竞争对手. 这款开源操作系统代号为Fuchsia,可以搭载在各种轻量级、单一目的的设备上,例如ATM机和GPS设备,同时也支持PC. 不过与Android不同,Fuchsia没有基于Linux内核,也并非衍生于当代其他PC或手机操作系统.

Android是个好系统

- - 月光博客
  仅凭一个Android,Google完全有资格领好人卡. 因为Android开源,就可以放心大胆的做各种“美化”、“定制”、“深度定制”. 而Google对这些行为不能抗议、强烈谴责、严正交涉,只能不满和深表遗憾.   对于Android在中国的情况,Williamlong认为:.    @williamlong: 对于互联网公司做手机,我会鄙视那些所谓“深度定制”而实际是删除谷歌帐号的那些平台,这不是国家政策方面的问题,谷歌应用删除了无所谓,用户可以自己安装,但是将谷歌帐号删除掉之后,用户只有通过刷机等复杂操作才能安装谷歌应用商店和其他谷歌应用,这对于用户来说是一种恶意绑架行为.

Android操作系统安全

- - CSDN博客推荐文章
        Android在迅猛发展的同时,其安全问题一直没有引起足够的重视,但在2010年6月研究人员发布Android平台的KernelRootkit以来,Android平台的安全问题引来了越来越多的关注,而同时,Android平台的恶意软件也开始流行起来.        根据以上的Android系统架构分析,可以发现在三个层面可能存在恶意软件.

Android 系统架构分析

- - CSDN博客移动开发推荐文章
Android:开源的 Linux + Google 的封闭软件 + 私有的基带 + 运营商锁定 = 开放的 Android 手机. iPhone:开源的 BSD + 苹果的闭源软件 + 私有的基带 + 运营商锁定 = 封闭的苹果 iPhone. 一个平庸的应用商店,开发者依靠广告赚钱,商店并非独此一家,用户找不到好软件.