Android 开发---LOG封装

来源:互联网 发布:通过网络安装软件补丁 编辑:程序博客网 时间:2024/06/01 10:26

我们在Android开发中,经常使用添加log的方法,通过分析log来判断代码的执行情况。但是,每个人都有自己的log,不删除的话代码显得特别low,但也不能操作别人添加的log,这样代码执行过程中,就不断的有LOG的输出,这是一个很繁琐的问题。网上查看了一下,很多大神现在都已经不适用Android源生的LOG了,而是对源生的LOG进行了封装。通过设置log的开关,设置是否输出LOG,然后每个人可以创建自己的LOG类。详细,请看代码:

LogUtil.java

  /**   * Created by vectoria on 2017/6/27.   * Log打印的封装   * 使用方法:   * 可以自定义自己的log.tag   */public class LogUtil{private static final boolean DEBUG = true;public static final String CONSTANTS_VECTORIA = "vectoria";public static void D(String tag,String logMsg){    if(DEBUG){        LogBase.d(tag,logMsg);    }}public static void d(String tag, String desc) {    if (DEBUG)        LogBase.d(tag, desc);}public static void v(String tag, String desc) {    if (DEBUG)        LogBase.v(tag, desc);}public static void w(String tag, String desc) {    if (DEBUG)        LogBase.w(tag, desc);}public static void i(String tag, String desc) {    if (DEBUG)        LogBase.i(tag, desc);}public static void e(String tag, String desc) {    if (DEBUG)        LogBase.e(tag, desc); }} 

LogBase.java

    /**

* Created by vectoria on 2017/7/17.
*/

public class LogBase {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;public static final String SEPARATOR = ",";public static void v(String message) {    if (LEVEL <= VERBOSE) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        String tag = getDefaultTag(stackTraceElement);        Log.v(tag, getLogInfo(stackTraceElement) + message);    }}public static void v(String tag, String message) {    if (LEVEL <= VERBOSE) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        if (TextUtils.isEmpty(tag)) {            tag = getDefaultTag(stackTraceElement);        }        Log.v(tag, getLogInfo(stackTraceElement) + message);    }}public static void d(String message) {    if (LEVEL <= DEBUG) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        String tag = getDefaultTag(stackTraceElement);        Log.d(tag, getLogInfo(stackTraceElement) + message);    }}public static void d(String tag, String message) {    if (LEVEL <= DEBUG) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        if (TextUtils.isEmpty(tag)) {            tag = getDefaultTag(stackTraceElement);        }        Log.d(tag, getLogInfo(stackTraceElement) + message);    }}public static void i(String message) {    if (LEVEL <= INFO) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        String tag = getDefaultTag(stackTraceElement);        Log.i(tag, getLogInfo(stackTraceElement) + message);    }}public static void i(String tag, String message) {    if (LEVEL <= INFO) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        if (TextUtils.isEmpty(tag)) {            tag = getDefaultTag(stackTraceElement);        }        Log.i(tag, getLogInfo(stackTraceElement) + message);    }}public static void w(String message) {    if (LEVEL <= WARN) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        String tag = getDefaultTag(stackTraceElement);        Log.w(tag, getLogInfo(stackTraceElement) + message);    }}public static void w(String tag, String message) {    if (LEVEL <= WARN) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        if (TextUtils.isEmpty(tag)) {            tag = getDefaultTag(stackTraceElement);        }        Log.w(tag, getLogInfo(stackTraceElement) + message);    }}public static void e(String tag, String message) {    if (LEVEL <= ERROR) {        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        if (TextUtils.isEmpty(tag)) {            tag = getDefaultTag(stackTraceElement);        }        Log.e(tag, getLogInfo(stackTraceElement) + message);    }}/** * 获取默认的TAG名称. * 比如在MainActivity.java中调用了日志输出. * 则TAG为MainActivity */public static String getDefaultTag(StackTraceElement stackTraceElement) {    String fileName = stackTraceElement.getFileName();    String stringArray[] = fileName.split("\\.");    String tag = stringArray[0];    return tag;}/** * 输出日志所包含的信息 * 线程ID * 类名 * 方法名 * 行数 * log */public static String getLogInfo(StackTraceElement stackTraceElement) {    StringBuilder logInfoStringBuilder = new StringBuilder();    // 获取线程名    String threadName = Thread.currentThread().getName();    // 获取线程ID    long threadID = Thread.currentThread().getId();    // 获取文件名.即xxx.java    String fileName = stackTraceElement.getFileName();    // 获取类名.即包名+类名    String className = stackTraceElement.getClassName();    // 获取方法名称    String methodName = stackTraceElement.getMethodName();    // 获取生日输出行数    int lineNumber = stackTraceElement.getLineNumber();    logInfoStringBuilder.append("[ ");    logInfoStringBuilder.append("threadID=" + threadID).append(SEPARATOR);    logInfoStringBuilder.append("className=" + className).append(SEPARATOR);    logInfoStringBuilder.append("methodName=" + methodName).append(SEPARATOR);    logInfoStringBuilder.append("lineNumber=" + lineNumber);    logInfoStringBuilder.append(" ] ");    return logInfoStringBuilder.toString(); }}

然后你就使用VLogUtil.d(tag,msg)方法调用就好了。
如果你觉得你的代码写的有点low,不妨试试这种装逼的方法,确实有用~

原创粉丝点击