源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android系统开发中log的使用方法及简单的原理

  • 时间:2021-07-30 07:02 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android系统开发中log的使用方法及简单的原理
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理。 [b]1、linux内核的log输出[/b] 在标准的linux内核开发过程中,使用printk,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有 打印级别且将信息保存到/proc/kmsg日志中,使用cat命令查看其信息[cat/proc/kmsg]
[u]复制代码[/u] 代码如下:
<SPANstyle="COLOR:#003333;FONT-SIZE:14px">#defineKERN_EMERG"<0>"/*systemisunusable*/ #defineKERN_ALERT"<1>"/*actionmustbetakenimmediately*/ #defineKERN_CRIT"<2>"/*criticalconditions*/ #deinfeKERN_ERR"<3>"/*errorconditions*/ #deinfeKERN_WARNING"<4>"/*warningconditions*/ #deinfeKERN_NOTICE"<5>"/*normalbutsignificantcondition*/ #deinfeKERN_INFO"<6>"/*informational*/ #deinfeKERN_DEBUG"<7>"/*debug-levelmessages*/</SPAN>
[b]2、android中log输出[/b] Android系统在用户空间中提供了轻量级的logger日志系统,它是在内核中实现的一种设备驱动,与用户空间的logcat工具配合使用能够方便地跟踪调试程序。 Android系统中的C/C++日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别: /* *Androidlogpriorityvalues,inascendingpriorityorder. */ typedefenumandroid_LogPriority{ ANDROID_LOG_UNKNOWN=0, ANDROID_LOG_DEFAULT,/*onlyforSetMinPriority()*/ ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_SILENT,/*onlyforSetMinPriority();mustbelast*/ }android_LogPriority; 为了使用方便,在system/core/include/cutils/log.h定义了相对应的宏: #defineLOGV(...)((void)LOG(LOG_VERBOSE,LOG_TAG,__VA_ARGS__)) #defineLOGD(...)((void)LOG(LOG_DEBUG,LOG_TAG,__VA_ARGS__)) #defineLOGI(...)((void)LOG(LOG_INFO,LOG_TAG,__VA_ARGS__)) #defineLOGW(...)((void)LOG(LOG_WARN,LOG_TAG,__VA_ARGS__)) #defineLOGE(...)((void)LOG(LOG_ERROR,LOG_TAG,__VA_ARGS__)) 因为如果需要使用log输出,包含其头文件:#include<cutils/log.h>并link其动态库:liblog.so即可 #defineLOG_TAG"XX_LOG_TAG"//这里可以定义其输出的TAG #include<cutils/log.h> JAVA层打印: importandroid.util.Log; privatestaticfinalStringTAG="XX_LOG_TAG"; Log.e(TAG,"ThisistheerrorlogprintedbyLog.iinandroiduserspace."); [b]3、盒子上如何获取log[/b] a、进入shell获取log adbkill-server adbconnectdest-ip adbshell【登录shell】 mount-oremount/system/system【改变权限】 logcat>>1.log 命令行输入CTRL+C回到cmd命令行,adbpullpath/1.log b、直接在cmd命令行获取log adbconnect连上后; adbshell adblogcat>>path/1.log 操作完毕后 命令行输入CTRL+C回到cmd命令行,adbpullpath/1.log c、在terminal终端直接输出log 回车切到shell logcat[此时即可看到打印] [b]4、Eclipse环境下运行(安装了Android插件),那么直接可以在Eclipse就可以查看了[/b] [img]http://files.jb51.net/file_images/article/201301/2013128105522230.jpg?2013028105548[/img]   [b]5、常用技巧[/b] 1、logcat中会打印【输出级别+LOG_TAG名字+进程字+打印的信息】可以充分利用这些信息分析问题 I/SystemServer(939):ActivityManager I/ActivityManager(939):Memoryclass:96 E/AndroidRuntime(939):ErrorreportingWTF 第一列由Log.i(e/w..决定)或者LOGI/LOGE/LOGW... 第二列由LOG_TAG/TAG(JAVA)中决定,可以对于同一组模块前相同的前缀[xxx]funtion这种命名 第三列是系统进程号getpid()这值,打印线程值pthread_slef() [b]最后的就是自行增加的打印信息[/b] 2、调效效率或者执行时间 1、建议重点的打印增加前缀,方便查找。以[######] 2、直接利用logcat输出时间,调试执行速度,分析效率 logcat-vtime【Displaythedate,invocationtime,priority/tag,andPIDoftheoriginatingprocess.】
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部