Android 开发---LOG封装

本文介绍了一种封装Android原生日志的方法,通过自定义LogUtil类实现日志开关控制及不同级别日志输出,便于开发者管理和调试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在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,不妨试试这种装逼的方法,确实有用~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值