Android系统开发中log的使用方法及简单的原理
Android系统开发中log的使用方法及简单的原理
发布时间:2017-01-07 来源:查字典编辑
摘要:在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中...

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

1、linux内核的log输出

在标准的linux内核开发过程中,使用printk,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有

打印级别且将信息保存到/proc/kmsg日志中,使用cat命令查看其信息[cat/proc/kmsg]

复制代码 代码如下:

<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>

2、android中log输出

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.");

3、盒子上如何获取log

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[此时即可看到打印]

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

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

5、常用技巧

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()

最后的就是自行增加的打印信息

2、调效效率或者执行时间

1、建议重点的打印增加前缀,方便查找。以[######]

2、直接利用logcat输出时间,调试执行速度,分析效率

logcat-vtime【Displaythedate,invocationtime,priority/tag,andPIDoftheoriginatingprocess.】

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类