一、打印日志介绍

安卓系统中提供了打印日志的方式:

Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() 

以上日志级别依次从低到高

打印日志的目的是为了方便定位问题和查看关键信息。

下面是对各种日志级别的输出介绍:

 1、Log.v 的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息
 2、Log.d的输出颜色是黑色的,输出大于或等于DEBUG日志级别的信息
 3、Log.i的输出为黑色,输出大于或等于INFO日志级别的信息
 4、Log.w的输出为蓝色, 输出大于或等于WARN日志级别的信息
 5、Log.e的输出为红色,仅输出ERROR日志级别的信息.

以上的颜色是android studio中的颜色信息,如果是eclipse,则颜色不同。

下面看下Android Studio中默认的日志输出颜色效果图

Android 只打印syslog 安卓日志打印_工具类

在哪里可以设置打印日志的颜色呢?

File->Settings->然后输入logcat查找,找到Android Logcat选项,右侧就是可以设置每个级别的颜色的部分。

二、打印日志的位置

Android Studio中查看打印日志,需要先找到下面的Android Monitor模块,然后找到logcat标签。

如果找不到logcat可以按照这个路径找下:Tools --->Android---->Android Device Monitor

可以在logcat的右上方看到选择输出日志级别的下拉框,在这里可以选择需要查看哪种级别的日志。

效果图如下:

Android 只打印syslog 安卓日志打印_打印日志_02

通过过滤后可以查看指定级别的日志。

为了方便查看日志也可以在logcat模块中的右上方找到Regex模块,可以在输入框中输入需要查找的信息。

Regex模块效果图如下:

Android 只打印syslog 安卓日志打印_工具类_03

在输入框中输入关键词,就可以看到下面的输出日志区域将输出内容按输入的关键词进行过滤,只要内容中包含了关键词的内容均会显示出来。

logcat右上方最后有一个模块可以选择输出范围内的日志,同时可以自定义输出日志。

先看下效果图

Android 只打印syslog 安卓日志打印_工具类_04

这里只讲最后一个选项,最后一项就是自定义输出日志的配置,点击后,打开一个弹出框,如下图所示:

Android 只打印syslog 安卓日志打印_使用_05

填入过滤条件,如下图:

Android 只打印syslog 安卓日志打印_Android 只打印syslog_06

这样通过过滤后我这里精确的找到一条记录:

02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog D/LogUtilUseActivity: debug

如果去掉过滤条件,日志信息如下:

02-21 16:06:04.787 18070-18070/com.mobile.cdtx.blog D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
02-21 16:06:04.817 18070-18070/com.mobile.cdtx.blog E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
02-21 16:06:04.817 18070-18070/com.mobile.cdtx.blog W/dalvikvm: VFY: unable to resolve instanceof 155 (Landroid/graphics/drawable/RippleDrawable;) in Landroid/support/v7/widget/AppCompatImageHelper;
02-21 16:06:04.817 18070-18070/com.mobile.cdtx.blog D/dalvikvm: VFY: replacing opcode 0x20 at 0x000c
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog V/LogUtilUseActivity: verbose
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog D/LogUtilUseActivity: debug
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog I/LogUtilUseActivity: info
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog W/LogUtilUseActivity: warn
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog E/LogUtilUseActivity: error
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog V/Activity: onStart com.mobile.cdtx.blog.main.activity.LogUtilUseActivity@4219c218
02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog V/Activity: onResume com.mobile.cdtx.blog.main.activity.LogUtilUseActivity@4219c218
02-21 16:06:05.367 18070-18070/com.mobile.cdtx.blog V/Activity: onStop com.mobile.cdtx.blog.main.activity.SeventeenTwoMonth@42181e60

设置完过滤条件后,Filter Name的值就会出现在下拉列表中,如:

Android 只打印syslog 安卓日志打印_工具类_07

当需要按指定条件过滤时,只需要选择这个就可以了,过滤条件可以添加多个,只要取不同的名字就可以了。

三、打印日志小技巧

调用打印日志函数的第一个参数,需要传入一个String tag字段,一般常用所在的类的类名。

比如说public class LogUtilUseActivity extends AppCompatActivity

这里类名是LogUtilUseActivity,所以定义Tag字段如下:

private static final String TAG = "LogUtilUseActivity";

如果经常这样敲,很无聊,有没有简单的方式自动生成呢?

答案:有

在类中的第一行,使用快捷键: logt,然后敲 Tab键或敲Enter键,将自动生成。

每次敲Log.v等东西是不是也很麻烦啊,能不能自动生成呢?

答案:有

在需要打印日志的地方如果想打印debug日志就输入 logd然后敲Tab键或Enter键,如果想打印Info日志就敲 logi,然后敲Tab键或Enter键,就会自动生成,打印其他日志同理

logd  logv  logi  logw  loge

自动生成中还自动将第一个参数使用了TAG变量。确实很方便。

四、日志工具类

这里给出一个日志工具类

目的:上线时需要屏蔽所有的日志或部分日志,开发时打印部分日志或全部日志。这是很实际的需求。

所以只要能满足这两种情况就可以了,定义一个日志工具类,通过一个变量控制是否输出日志及打印的日志的级别。

/**
 * Created by wangwentao on 2017/2/21.
 * 打印日志工具类
 * 使用方法:level = VERBOSE可以打印所有的日志;level = NOTHING所有的日志都打印不出来,上线时设置level = NOTHING
 */

public class LogUtil {
    public static final int VERBOSE = 1;
    public static final int DEBUG = 2;
    public static final int INFO = 3;
    public static final int WARN = 4;
    public static final int ERROR = 5;
    public static final int NOTHING = 6;
    public static final int level = VERBOSE;

    private LogUtil() {
        throw new UnsupportedOperationException("本日志工具类不能被实例化,直接调用静态方法就好");
    }

    /**
     * 打印Verbose级别日志
     * @param tag
     * @param msg
     */
    public static void v(String tag,String msg){
        if(level <= VERBOSE){
            Log.v(tag, msg);
        }
    }

    /**
     * 打印Debug级别日志
     * @param tag
     * @param msg
     */
    public static void d(String tag,String msg){
        if(level <= DEBUG){
            Log.d(tag, msg);
        }
    }

    /**
     * 打印Info级别日志
     * @param tag
     * @param msg
     */
    public static void i(String tag,String msg){
        if(level <= INFO){
            Log.i(tag, msg);
        }
    }

    /**
     * 打印Warn级别日志
     * @param tag
     * @param msg
     */
    public static void w(String tag,String msg){
        if(level <= WARN){
            Log.w(tag, msg);
        }
    }

    /**
     * 打印Error级别的日志
     * @param tag
     * @param msg
     */
    public static void e(String tag,String msg){
        if(level <= ERROR){
            Log.e(tag, msg);
        }
    }
}



工具类中关于使用写的很详细了,下面给出部分测试代码:

LogUtil.v(TAG,"verbose");
LogUtil.d(TAG,"debug");
LogUtil.i(TAG,"info");
LogUtil.w(TAG,"warn");
LogUtil.e(TAG,"error");

02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog V/LogUtilUseActivity: verbose


02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog D/LogUtilUseActivity: debug


02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog I/LogUtilUseActivity: info


02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog W/LogUtilUseActivity: warn


02-21 16:06:04.887 18070-18070/com.mobile.cdtx.blog E/LogUtilUseActivity: error


以上是输出日志。