有些情况下,不方便使用断点的方式来调试,而是希望在控制台打印输出日志,使用过Eclipse的同学都知道Java可以使用 System.out.println(""); 来在控制台打印输出日志,但是在android studio中却是不行的,还是有差别的,那应该用什么呢?

android.util.Log

在调试代码的时候我们需要查看调试信息,那我们就需要用AndroidLog类。

android.util.Log常用的方法有以下5个:Log.v()Log.d()Log.i()Log.w()以及Log.e()。根据首字母对应VERBOSEDEBUG,INFO,WARNERROR

1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

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

4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

注意:不同的打印方法在使用时都是某个方法带上(String tag, String msg)参数,tag表示的是打印信息的标签,msg表示的是需要打印的信息。

Log.java类

/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package android.util;import java.io.PrintWriter;import java.io.StringWriter;import java.net.UnknownHostException;/** * Mock Log implementation for testing on non android host. */public final class Log {    /**     * Priority constant for the println method; use Log.v.     */    public static final int VERBOSE = 2;    /**     * Priority constant for the println method; use Log.d.     */    public static final int DEBUG = 3;    /**     * Priority constant for the println method; use Log.i.     */    public static final int INFO = 4;    /**     * Priority constant for the println method; use Log.w.     */    public static final int WARN = 5;    /**     * Priority constant for the println method; use Log.e.     */    public static final int ERROR = 6;    /**     * Priority constant for the println method.     */    public static final int ASSERT = 7;    private Log() {    }    /**     * Send a {@link #VERBOSE} log message.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     */    public static int v(String tag, String msg) {        return println(LOG_ID_MAIN, VERBOSE, tag, msg);    }    /**     * Send a {@link #VERBOSE} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @param tr An exception to log     */    public static int v(String tag, String msg, Throwable tr) {        return println(LOG_ID_MAIN, VERBOSE, tag, msg + '\n' + getStackTraceString(tr));    }    /**     * Send a {@link #DEBUG} log message.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     */    public static int d(String tag, String msg) {        return println(LOG_ID_MAIN, DEBUG, tag, msg);    }    /**     * Send a {@link #DEBUG} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @param tr An exception to log     */    public static int d(String tag, String msg, Throwable tr) {        return println(LOG_ID_MAIN, DEBUG, tag, msg + '\n' + getStackTraceString(tr));    }    /**     * Send an {@link #INFO} log message.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     */    public static int i(String tag, String msg) {        return println(LOG_ID_MAIN, INFO, tag, msg);    }    /**     * Send a {@link #INFO} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @param tr An exception to log     */    public static int i(String tag, String msg, Throwable tr) {        return println(LOG_ID_MAIN, INFO, tag, msg + '\n' + getStackTraceString(tr));    }    /**     * Send a {@link #WARN} log message.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     */    public static int w(String tag, String msg) {        return println(LOG_ID_MAIN, WARN, tag, msg);    }    /**     * Send a {@link #WARN} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @param tr An exception to log     */    public static int w(String tag, String msg, Throwable tr) {        return println(LOG_ID_MAIN, WARN, tag, msg + '\n' + getStackTraceString(tr));    }    /*     * Send a {@link #WARN} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param tr An exception to log     */    public static int w(String tag, Throwable tr) {        return println(LOG_ID_MAIN, WARN, tag, getStackTraceString(tr));    }    /**     * Send an {@link #ERROR} log message.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     */    public static int e(String tag, String msg) {        return println(LOG_ID_MAIN, ERROR, tag, msg);    }    /**     * Send a {@link #ERROR} log message and log the exception.     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @param tr An exception to log     */    public static int e(String tag, String msg, Throwable tr) {        return println(LOG_ID_MAIN, ERROR, tag, msg + '\n' + getStackTraceString(tr));    }    /**     * Handy function to get a loggable stack trace from a Throwable     * @param tr An exception to log     */    public static String getStackTraceString(Throwable tr) {        if (tr == null) {            return "";        }        // This is to reduce the amount of log spew that apps do in the non-error        // condition of the network being unavailable.        Throwable t = tr;        while (t != null) {            if (t instanceof UnknownHostException) {                return "";            }            t = t.getCause();        }        StringWriter sw = new StringWriter();        PrintWriter pw = new PrintWriter(sw);        tr.printStackTrace(pw);        pw.flush();        return sw.toString();    }    /**     * Low-level logging call.     * @param priority The priority/type of this log message     * @param tag Used to identify the source of a log message.  It usually identifies     *        the class or activity where the log call occurs.     * @param msg The message you would like logged.     * @return The number of bytes written.     */    public static int println(int priority, String tag, String msg) {        return println(LOG_ID_MAIN, priority, tag, msg);    }    /** @hide */ public static final int LOG_ID_MAIN = 0;    /** @hide */ public static final int LOG_ID_RADIO = 1;    /** @hide */ public static final int LOG_ID_EVENTS = 2;    /** @hide */ public static final int LOG_ID_SYSTEM = 3;    /** @hide */ public static final int LOG_ID_CRASH = 4;    /** @hide */ @SuppressWarnings("unused")    public static int println(int bufID,            int priority, String tag, String msg) {        return 0;    }}
有小伙伴问我怎么在Android Studio中查看Log类?


在代码编辑器中,将光标定位在Log上,然后按下快捷键:Ctrl+B,就可以打开类文件了。

Logcat窗口


我还真不知道这个窗口能不能完全关闭掉,它好像是和Android Monitor 是一体的。如下图:


我们可以在logcat上按下然后拖动鼠标,把它拉出来,弹出一个单独的窗口。


关闭窗口之后,它又会回到Android Monitor 上。


上图中点击Restore ‘logcat’View 之后又弹出窗口,而不是和Android Monitor并排在标签上;

这时你可以在‘logcat’标签上按钮鼠标左键拖动它到Monitor标签旁边松开鼠标,它就回去了。


你也可以通过下拉列表框中的选项,或右侧的搜索框输入指定的关键词来筛选日志内容。


也可以通过右侧的编辑筛选配置来创建特定的筛选类型,方便以后使用。


小结

关于日志的使用就说这么多。

通过打印输出日志来调试是一种方法,却不是一种万能的方法。

为什么这么说呢?

因为有些时候(比如线程、网络操作之类的),打印日志的时候没有Bug,但把日志关了就会出Bug。

有些情况是调试模式运行的时候不出Bug,而正式运行的时候就出Bug。

上一篇:走进Android开发的世界,HelloWorld

系列导航:【Android 开发入门】

===========文后小料============

真正改变命运的其实并不是知识,而是这些知识带给你的能力的提高。也就是说,转化为能力的知识,才能够改变你的命运。
当你去追求一个百分之百的安全感的时候,你可能就只能把自己困在原地,哪儿都去不了,其实这是最不安全的。
今天这一代的员工,一定是通过提升自己的能力换来自己的安全。我们也更倾向于把价值存在朋友圈里边。

===========文档信息============
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :testcs_dn(微wx笑)
文章出处:[无知人生,记录点滴](http://blog.csdn.net/testcs_dn)

更多相关文章

  1. 读取android手机流量信息
  2. android studio调试c/c++代码
  3. android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
  4. android 零星调试笔记
  5. MTK Android(安卓)Driver:led
  6. 重定向android log
  7. [RK3399][Android7.1] 调试笔记 --- 设置搜狗为开机默认输入法
  8. Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
  9. android 电容屏(二):驱动调试之基本概念篇

随机推荐

  1. Android(安卓)init进程——源码分析
  2. 简述Android触摸屏手势识别
  3. 系出名门Android(2) - 布局(Layout)和菜
  4. Android经久不衰最受欢迎的开源库整理,你
  5. Xposed框架之函数Hook学习
  6. Android(安卓)Studio Error:前言中不允许
  7. android软键盘的显示后隐藏
  8. 浅谈Android五大布局
  9. android cmd adb命令安装和删除apk应用
  10. Android(安卓)关于EditText文字的显示问