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

在程序开发过程中,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.】

(0)

相关推荐

  • logcat命令使用方法和查看android系统日志缓冲区内容的方法

    *注:可以用 adb logcat > 路径/文件名 来保存,此命令执行之时起的全部日志信息到一个文件里,ctrl + C 结束日志输出:后面不加 > 路径/文件名 的话,则在 stdout (终端窗口)中输出!例如:$ adb logcat -v long Checkin *:S > ~/桌面/log.txt 一.在 Java 与 C 语言中输出日志:1) Java 代码在程序中输出日志, 使用 android.util.Log 类的以下 5 个方法:   Log.v().Log.d(

  • Android开发笔记之:Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助.android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR.1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用

  • android中ProgressDialog与ProgressBar的使用详解

    一 .ProgressDialogProgressDialog与ProgressBar在UI中动态显示一个加载图标显示程序运行状态.ProgressDialog是继承自Android.app.ProgressDialog所设计的互动对话窗口,使用时,必须新建ProgressDialog对象,在运行时会弹出"对话框"作为提醒,此时应用程序后台失去焦点(即此时无法对UI组件进行操作),直到进程结束后,才会将控制权交给应用程序,如果在Activity当中不希望后台失焦,又希望提示User有某

  • Android Studio使用小技巧:自定义Logcat

    我们都知道Logcat是我们Android开发调试最常用的一个工具,但是Android Studio默认的Logcat调试的颜色是一样的,我们不好区分verbose.debug.error等分类信息,今天就来教大家自定义Logcat的提示信息. 打开Preference->Editor->Colors & Fonts->Android Logcat(或者搜索logcat),如果我们默认选择的是Darcula主题会看到如下界面: 这个默认的是无法更改,我们可以点击"Sav

  • Android 实现自己的LOG信息

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

  • Android中自定义对话框(Dialog)的实例代码

    1.修改系统默认的Dialog样式(风格.主题) 2.自定义Dialog布局文件 3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类 第一步: 我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,在源码中的路径:/frameworks/base/core/res/res/values/themes.xml,我们可以看到,Android为Dialog定义了

  • android控件封装 自己封装的dialog控件

    自定义dialog肯定是用的很多了但是感觉每次做都是很乱 单纯完成任务而已,现在封装了一下 以后用到直接copy 先上图: 主activity 复制代码 代码如下: package com.su.testcustomdialog; import com.su.testcustomdialog.MyDialog.Dialogcallback; import android.app.Activity; import android.os.Bundle; import android.view.Vie

  • android真机调试时无法显示logcat信息的解决方法介绍

    android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

  • Android开发笔记之:一分钟学会使用Logcat调试程序的详解

    这是个很简单的问题,但每次隔一段时间后使用起来总是会出点乱子.这里记录下Logcat的步骤:1,在Activity里申明tag变量(名字其实是随便的,如下:private static final String tag="yan";2,需要使用logcat输出信息时:Log.i(tag, "屏幕宽度:"+display.getWidth()+" 屏幕高度:"+display.getHeight());3, 双击Logcat,点击"+&q

  • android dialog自定义实例详解

    本人工作有一个月多了.对于android很多东西,都有了新的了解或者说真正的掌握.为了让更多的像我这样的小白少走弯路,所以我会坚持将我在工作中遇到的一些比较令我印象深刻的知识点整合出来给大家(顺序是按照我工作到现在的时间来制作的,其实也是想给自己一个记录吧.记录自己一路走来以及以后的路, 至少我想找到曾经的记录都有了). 第一个需求:简单的自定义dialog 需求:创建一个dialog,该dialog具备以下功能: 1.有一个窗口可以显示文章 2.根据需求显示 1)点击同意(不同意),触发对应的

随机推荐