Android工具类之LogUtils

目录

  • 代码
  • 使用方法
  • 知识扩展
    • StackTraceElement
      • 获取方法
      • 成员变量
      • 使用方法
  • 参考链接

代码

public class LogUtils {
    
    private final static String APP_TAG = "appName";
    
    public static void v(String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.v(APP_TAG, getMsgFormat(msg));
        }
    }

    public static void v(String tag, String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.v(tag, getMsgFormat(msg));
        }
    }


    public static void d(String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.d(APP_TAG, getMsgFormat(msg));
        }
    }

    public static void d(String tag, String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.d(tag, getMsgFormat(msg));
        }
    }


    public static void i(String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.i(APP_TAG, getMsgFormat(msg));
        }
    }

    public static void i(String tag, String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.i(tag, getMsgFormat(msg));
        }
    }


    public static void w(String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.w(APP_TAG, getMsgFormat(msg));
        }
    }

    public static void w(String tag, String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.w(tag, getMsgFormat(msg));
        }
    }


    public static void e(String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.e(APP_TAG, getMsgFormat(msg));
        }
    }

    public static void e(String tag, String msg) {
        if (Constant.IS_PRINT_LOG) {
            Log.e(tag, getMsgFormat(msg));
        }
    }

    public static void e(String tag, String msg, Throwable e) {
        if (Constant.IS_PRINT_LOG) {
            Log.e(tag, getMsgFormat(msg), e);
        }
    }

    public static void e(String msg, Throwable e) {
        if (Constant.IS_PRINT_LOG) {
            Log.e(APP_TAG, getMsgFormat(msg), e);
        }
    }

    private static String getMsgFormat(String msg) {
        return getFunctionName() + " : " + msg;
    }

    /**
     * 格式 Thread:线程名 类名.方法名
     *
     * @return
     */
    private static String getFunctionName() {
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        if (sts != null) {
            int index = -1;
            String className = "";
            for (StackTraceElement st : sts) {
                if (st.isNativeMethod()) {
                    continue;
                }
                if (st.getClassName().equals(Thread.class.getName())) {
                    continue;
                }

                if (st.getClassName().equals(LogUtils.class.getName())) {
                    continue;
                }

                  //com.aa.bb.类名->类名
                if ((index = st.getClassName().lastIndexOf(".")) != -1) {
                    className = st.getClassName().substring(index + 1);
                }

                return "Thread:" + Thread.currentThread().getName()
                        + " " + className
                        + "." + st.getMethodName();
            }
        }
        return null;
    }

}

通过Constant.IS_PRINT_LOG控制log的状态:

public class Constant {
public static final boolean IS_PRINT_LOG = true;//是否打印log,true为打印,false为不打印
}

使用方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LogUtils.v("内容");
        setContentView(R.layout.activity_main);
    }
//logcat:
2020-03-23 09:45:58.788 2241-2241/com.aa.bb V/appName: Thread:main MainActivity.onCreate : 内容

知识扩展

StackTraceElement

StackTraceElement表示StackTrace(堆栈轨迹)中的一个元素,属性包括方法调用者的类名、方法名、文件名以及调用的行数。

获取方法

获取StackTraceElement的方法有两种,均返回StackTraceElement数组

  1. Thread.currentThread().getStackTrace()
  2. new Throwable().getStackTrace()

成员变量

private String declaringClass; 类名
private String methodName; 方法名
private String fileName; 文件名
private int lineNumber; 行数

使用方法

        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
                StackTraceElement st = sts[0];
                String className = st.getClassName();
                String methodName = st.getMethodName();
                String fileName = st.getFileName();
                int lineNumber = st.getLineNumber();
                //如果 fileName+":"lineNumber 可在log点击行数跳转到对应代码.

参考链接

链接:Android中Log日志的管理之log工具类

你可能感兴趣的:(Android,工具类)