Android系统开发中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就可以查看了
 

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

时间: 2024-10-21 13:58:21

Android系统开发中log的使用方法及简单的原理_Android的相关文章

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

在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.在平时开发过程中经常需要与log打交道,所以很有必要了解log的使用方法及简单的原理. 1.linux内核的log输出 在标准的linux内核开发过程中,使用printk,这是一个与printf输出打印齐名的函数,同样提供格式化输出功能,只是其有 打印级别且将信息保存到/proc/kmsg日志中,使用c

浅谈Android系统开发中LOG的使用

在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.在这一篇文章中,我们简单介绍在Android内核空间和用户空间中LOG的使用和查看方法.         一. 内核开发时LOG的使用.Android内核是基于Linux Kerne 2.36的,因此,Linux Kernel的LOG机制同样适合于Android内核,它就是有名的printk,与C语言的

Android App开发中HTTP扩展包OkHttp的入门使用指南_Android

Android 开发,不可避免的会用到网络技术,而多数情况下,我们都是使用 HTTP 协议来发送和接收网络数据.Android 系统主要提供两种方式来进行 HTTP 通信,HttpURLConnection 和 HttpClient,但是从 Android 2.3 及以后版本中,Google 推荐使用 HttpURLConnection,究其原因,就是由于 HttpClient 的 API 数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前 Android 团队在提升和优化

Android开发中MotionEvent坐标获取方法分析_Android

本文实例讲述了Android开发中MotionEvent坐标获取方法.分享给大家供大家参考,具体如下: Android MotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别getX()           :   是获取相对当前控件(View)的坐标 getRawX()   :   是获取相对显示屏幕左上角的坐标 演示示例代码 Java代码: public class MainActivity extends Activity implements On

Android应用开发中对Bitmap的内存优化

在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图片的内存优化,是Android应用开发中比较重要的内容. 1) 要及时回收Bitmap的内存 Bitmap类有一个方法recycle(),从方法名可以看出意思是回收.这里就有疑问了,Android系统有自己的垃圾回收机制,可以不定期的回收掉不使用的内存空间,当然也包括Bitmap的空间.那为什么还需

Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化

  关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! 原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/10/6127578.aspx 先上一段代码大家来看一下: view plaincopy to clipboardprint? ·········10········20········30········40········50········60········70········80····

Android编程开发中ListView的常见用法分析_Android

本文实例讲述了Android编程开发中ListView的常见用法.分享给大家供大家参考,具体如下: 一.ListView的使用步骤 ListView的使用通常有以下三个要素: (1)ListView中每个条目的布局; (2)填充进入ListView中的内容; (3)将内容与页面进行整合的Adapter. 因此,使用ListView也通常有以下三个步骤: (1)创建ListView条目的布局文件(或使用Android SDK提供的布局); (2)创建填充进入ListView中的内容,如字符串.图片

Android游戏开发学习①弹跳小球实现方法_Android

本文实例讲述了Android游戏开发学习①弹跳小球实现方法.分享给大家供大家参考.具体如下: 在学习了一点点Android之后,觉得有必要记录下来,于是就开了这个新坑,慢慢来填吧. 1.运动体Movable类 本例主要模拟了一组大小不一的球以一定的水平初速度从高处落下的运动轨迹.其中的小球为一个可移动物体Movable对象,该类中除了包含小球图片对象之外,还包括了如位置坐标.水平速度.垂直速度等一系列用于模拟小球运动的成员变量和一些方法. Movable类: package com.ball;

Android编程开发中ListView的常见用法分析

本文实例讲述了Android编程开发中ListView的常见用法.分享给大家供大家参考,具体如下: 一.ListView的使用步骤 ListView的使用通常有以下三个要素: (1)ListView中每个条目的布局; (2)填充进入ListView中的内容; (3)将内容与页面进行整合的Adapter. 因此,使用ListView也通常有以下三个步骤: (1)创建ListView条目的布局文件(或使用Android SDK提供的布局); (2)创建填充进入ListView中的内容,如字符串.图片