您的位置 首页 新品

Android Log日志调试(android.utl.log)

Android调试要通过模拟器运行,或者直接USB远程连接到一部手机调试。即使在不关闭模拟进行调试时候,也要经过编译、apk打包、上传apk、运行apk的过程

Android调试要经过模仿器运转,或许直接USB长途连接到一部手机调试。即便在不封闭模仿进行调试时分,也要经过编译、apk打包、上传apk、运转apk的进程,时刻也不短,所以应该在程序固定一次运转中,发生更多咱们需求重视的信息,来更清楚的了解程序的运转和逻辑,以便削减上述较长的进程(曾经开发用过最土的做法,为了check某个变量的值,运用Toast.makeText()然后show出来,很费事)。

做过互联网后台体系服务或大型程序的人们都知道,假如后台服务反常了,榜首反响便是去查日志,看看究竟哪里出了问题(提示一下,许多人以为打日志是磁盘操作很影响功用,其实不然,Linux的文件体系会对read/write等体系调用做page cache缓存,只需不是Direct I/O方法根本都能够以为是内存操作),Android体系亦是如此(不过是在调试时分,发布时分则不会带日志)。

今日要说到的便是Android为咱们供给的android.util.log类,能够边运转边打日志,打出的日志能够经过Eclipse的View的LogCat来查询。

* Android日志完成原理(不关心细节完成能够越过) :

首要用户态的App经过Java VM(Android是dalvikvm)发生LOG信息,并与ADB Device Daemon(手机端的adb进程,翻开”手机调试“功用时发动的,这便是为什么装置豌豆荚时分手机要敞开手机调试功用)交互输出这些信息,而ADB Device Daemon又经过相应的协议经过USB(Device)或本地连接(Emulator),与PC上运转的ADB Host Daemon交互,经过PC上的调试东西传递给Eclipse中的ADK插件进行显现。

详细流程 :

App经过util.log.发生日志->JVM->JNI(Native C)调用->log_write的sys_call()->logger驱动->dispatch分发给订阅者

logger是android体系级的驱动程序,会把注册在体系里的读log的请求者(例如链接过来的eclipse和adb进程、或许linux命令行东西logcat),经过IO复用函数select()来推送数据。

打印日志句子实例 :

源码打印?

Log.v(MyTag, This is Verbose.); // 输出verbose等级的字符串

java.util.log里界说了不同等级的输出,分别在LogCat里显现不同的色彩,以便更精准的查找:

Log.v 的调试色彩为黑色的,任何音讯都会输出,这儿的v代表verbose嗦的意思,平常运用便是Log.v(,);

Log.d的输出色彩是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来能够经过DDMS的Logcat标签来挑选.

Log.i的输出为绿色,一般提示性的音讯information,它不会输出Log.v和Log.d的信息,但会显现i、w和e的信息

Log.w的意思为橙色,能够看作为warning正告,一般需求咱们留意优化Android代码,一起挑选它后还会输出Log.e的信息。

Log.e为赤色,能够想到error过错,这儿仅显现赤色的过错信息,这些过错就需求咱们仔细的剖析,检查栈的信息了。

写程序的时分能够经过调用不同的Log.来分级自己的输出。

打印日志的时分,或许咱们不只需求过错的msg,还期望得到调用者的仓库(比方打log的函数名是什么,类名是什么)。所以,自己编写了一个能够封装这些信息的build函数来封装一些详细信息,用户只需求传入msg即可。而且经过debug开关,在程序发布时分封闭无用的日志调用:

源码打印?

public static class LogMsgBuidler

{

private static boolean DEBUG = true; /* 默许敞开 */

public static void reverse()

{

DEBUG = !DEBUG; /* 回转DEBUG设置 */

}

public static String build(String msg)

{

if (!DEBUG)

return msg;

// 获取仓库信息

StackTraceElement caller = new Throwable().fillInStackTrace().getStackTrace()[2];

return new StringBuilder().append(caller.getClassName())

.append(.).

append(caller.getMethodName())

.append((): )

.append(msg).toString();

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/298279.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部