美文网首页
Android自定义Log打印

Android自定义Log打印

作者: seawaveai | 来源:发表于2017-03-31 14:15 被阅读0次

    ## 实现超好用的Log打印功能 ##

    ### 说明:

    1.在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名.

    2.结合logcat的筛选功能,可以实现只看某个级别的log日志.

    [ 只想看info级别的日志? 就可以使mDebuggable=3,Log输出控制台调到info级别筛选 ]

    ### 使用步骤:

    1.拷贝LogUtils类到项目中

    2.自定义快捷键,如: LogUtils.i(this, "$msg$");

    自己定义的快捷键

    ### 代码截图:

    类和字段 这是v级别的方法

    ### 全部的代码如下:

    public class LogUtils {

      /**

    * @desc 允许输出log的级别(0代表不输出, 5代表输出所有的日志; 1就是输出v, 2就是输出v和d, 3就是输出v, d, i ...)

    */

    private static int mDebuggable = 5;

    /**

    * 日志输出级别V

    */

    public static final int LEVEL_VERBOSE = 1;

    /**

    * 日志输出级别D

    */

    public static final int LEVEL_DEBUG   = 2;

    /**

    * 日志输出级别I

    */

    public static final int LEVEL_INFO    = 3;

    /**

    * 日志输出级别W

    */

    public static final int LEVEL_WARN    = 4;

    /**

    * 日志输出级别E

    */

    public static final int LEVEL_ERROR   = 5;

    /**---------------日志输出, begin---------------**/

    /**

    * 以级别为 v 的形式输出LOG

    */

    public static void v(Object objTag, String msg) {

    if (mDebuggable >= LEVEL_VERBOSE) {

    String tag;

    // 如果objTag是String,则直接使用;如果objTag不是String,则使用它的类名

    if (objTag instanceof String) {

    tag = (String) objTag;

    } else if (objTag instanceof Class) {

    tag = ((Class) objTag).getSimpleName();

    } else {

    //处理在匿名内部类中写this显示不出类名的问题

    tag = objTag.getClass().getName();

    String[] split = tag.split("\\.");

    tag = split[split.length - 1].split("\\$")[0];

    }

    if (TextUtils.isEmpty(tag)) {//处理当objTag为null的情况

    tag = "该Tag为空";

    }

    if (TextUtils.isEmpty(msg)) {

    Log.v(tag, "该log输出信息为空");

    } else {

    Log.v(tag, msg);

    }

    }

    }

    /**

    * 以级别为 d 的形式输出LOG

    */

    public static void d(Object objTag, String msg) {

    if (mDebuggable >= LEVEL_DEBUG) {

    String tag;

    // 如果objTag是String,则直接使用;如果objTag不是String,则使用它的类名

    if (objTag instanceof String) {

    tag = (String) objTag;

    } else if (objTag instanceof Class) {

    tag = ((Class) objTag).getSimpleName();

    } else {

    //处理在匿名内部类中写this显示不出类名的问题

    tag = objTag.getClass().getName();

    String[] split = tag.split("\\.");

    tag = split[split.length - 1].split("\\$")[0];

    }

    if (TextUtils.isEmpty(tag)) {

    tag = "该Tag为空";

    }

    if (TextUtils.isEmpty(msg)) {

    Log.d(tag, "该log输出信息为空");

    } else {

    Log.d(tag, msg);

    }

    }

    }

    /**

    * 以级别为 i 的形式输出LOG

    */

    public static void i(Object objTag, String msg) {

    if (mDebuggable >= LEVEL_INFO) {

    String tag;

    // 如果objTag是String,则直接使用

    // 如果objTag不是String,则使用它的类名

    if (objTag instanceof String) {

    tag = (String) objTag;

    } else if (objTag instanceof Class) {

    tag = ((Class) objTag).getSimpleName();

    } else {

    tag = objTag.getClass().getName();

    String[] split = tag.split("\\.");

    tag = split[split.length - 1].split("\\$")[0];

    }

    if (TextUtils.isEmpty(tag)) {

    tag = "该Tag为空";

    }

    if (TextUtils.isEmpty(msg)) {

    Log.i(tag, "该log输出信息为空");

    } else {

    Log.i(tag, msg);

    }

    }

    }

    /**

    * 以级别为 w 的形式输出LOG

    */

    public static void w(Object objTag, String msg) {

    if (mDebuggable >= LEVEL_WARN) {

    String tag;

    // 如果objTag是String,则直接使用

    // 如果objTag不是String,则使用它的类名

    if (objTag instanceof String) {

    tag = (String) objTag;

    } else if (objTag instanceof Class) {

    tag = ((Class) objTag).getSimpleName();

    } else {

    tag = objTag.getClass().getName();

    String[] split = tag.split("\\.");

    tag = split[split.length - 1].split("\\$")[0];

    }

    if (TextUtils.isEmpty(tag)) {

    tag = "该Tag为空";

    }

    if (TextUtils.isEmpty(msg)) {

    Log.w(tag, "该log输出信息为空");

    } else {

    Log.w(tag, msg);

    }

    }

    }

    /**

    * 以级别为 e 的形式输出LOG

    */

    public static void e(Object objTag, String msg) {

    if (mDebuggable >= LEVEL_ERROR) {

    String tag;

    // 如果objTag是String,则直接使用

    // 如果objTag不是String,则使用它的类名

    if (objTag instanceof String) {

    tag = (String) objTag;

    } else if (objTag instanceof Class) {

    tag = ((Class) objTag).getSimpleName();

    } else {

    tag = objTag.getClass().getName();

    String[] split = tag.split("\\.");

    tag = split[split.length - 1].split("\\$")[0];

    }

    if (TextUtils.isEmpty(tag)) {

    tag = "该Tag为空";

    }

    if (TextUtils.isEmpty(msg)) {

    Log.e(tag, "该log输出信息为空");

    } else {

    Log.e(tag, msg);

    }

    }

    }

    /**---------------日志输出, end---------------**/

    }

    相关文章

      网友评论

          本文标题:Android自定义Log打印

          本文链接:https://www.haomeiwen.com/subject/xjfdnttx.html