1. 定制Logcat调试日志字体颜色

    Logcat是Android开发调试中最常用的一个工具,Android Studio 1.2.2中默认对Logcat调试的颜色已经有所区分,但如果你想要定制自己的调试日志对应的字体颜色,以便更好地区分verbose、debug、error、info、warning等分类信息,那么下面看看如何来自定义Logcat的提示信息。

由于我们在之前的[2] “编辑字体设置”中已经设置了myDarcula Scheme,因此会看到如下界面:

Studio mac上Android 启动日志查看 android studio 日志窗口在哪里_android

    这里可以看到有6种调试级别:Assert、Debug、Error、Info、Verbose、Warning。

    注意需要先将右边Use inherited attributes选项去掉打钩,然后才可以自定义颜色,此时双击右边Foregound图标就可以为每种分类设定特定的颜色了:

                  

该调试级别文字会立即发生变化,非常直观。



2. Logcat过滤选项

    在[3]的第6部分,初次认识了Logcat,下面仔细看看如何来使用Logcat来快速查找关心的日志信息:

    

Studio mac上Android 启动日志查看 android studio 日志窗口在哪里_Android_02

   左侧可看到Logcat对话窗口,右上方可依次看到Log Level过滤选项、搜索过滤输入框、以及Filter Configuration选项。

    

    选择Edit Filter Configuration,出现“Create New Logcat Filter”窗口,其中可设置一个或多个选项来过滤日志,并为这一组过滤参数指定一个Filter Name:

     . 可通过正则编写的Log TAG

可通过正则编写的Log Message

    . Package Name

    . PID

    . Log Level   

              

Studio mac上Android 启动日志查看 android studio 日志窗口在哪里_android_03

 

   这里我们根据TAG和Level设置两个过滤项,分别命名为firstActivity与secondActivity:

            

Studio mac上Android 启动日志查看 android studio 日志窗口在哪里_android_04

两个过滤项: firstActivity与secondActivity了。

   

Studio mac上Android 启动日志查看 android studio 日志窗口在哪里_android_05



3. 代码中输出日志信息

     为了在代码中输出日志信息,需要使用Log类(import android.util.Log)。一个好的实践是针对每个类/活动定义一个TAG常量,例如取当前类/活动的名称作为TAG,然后利用log.v, log.d, log.i, log.w, log.e方法输出日志。

     这几个方法的最基本调用方式为第一个参数为@tag, 用于标识log消息的sorce,通常使用类或者活动名称作为tag, 可在Logcat中基于tag快速过滤。第二个参数为日志串@msg,返回值int表示发送日志消息的字节数。


public static int v(String tag, String msg)
public static int d(String tag, String msg)
public static int i(String tag, String msg)
public static int w(String tag, String msg)
public static int e(String tag, String msg)


注意:当调用


Log.v(TAG, "index=" + i);


StringBuilder, 至少涉及3次分配操作:StringBuilder自身,buffer, 以及String对象。实际上还有另外一次buffer分配与复制,将对垃圾回收GC造成更大的压力。这也就意味着如果你的log消息被过滤掉,则这里会对系统有较大的负荷-不断地做buffer的分配与释放(That means that if your log message is filtered out, you might be doing significant work and incurring significant overhead.)

   日志调用举例,判断activity创建时之前是否存在状态信息:


import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
    }
}


输出调用栈到日志中:

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

注意:

4. 在Debugger模式下运行应用程序

    待续

参考资料:

[1] Android Studio使用小技巧:自定义Logcat, http://www.jb51.net/article/65515.htm

[2] Debugging with Android Studio, https://developer.android.com/intl/zh-cn/tools/debugging/debugging-studio.html

[3] class log, https://developer.android.com/intl/zh-cn/reference/android/util/Log.html

[4] 第一行代码——Android, 郭霖著, 人民邮电出版社, 2014.08.