Android自定义Log类

本文介绍了在Android开发中如何自定义DebugLog类,以统一管理和解决调试log显示不全的问题,同时也方便快速定位到日志对应的代码位置。

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

Android开发为了统一管理调试log功能自定义了DebugLog类,并处理了超长log显示不完整的情况。

同时可以快速定位Log代码处

实现代码如下

 

/**
 * log类
 * 通过gradle配置启/禁用: buildConfigField("Boolean","DebugLogEnable","true")
 */
public class DebugLog {

 public final static boolean I = BuildConfig.DebugLogEnable;
    public final static boolean V = BuildConfig.DebugLogEnable;
    public final static boolean D = BuildConfig.DebugLogEnable;
    public final static boolean W = BuildConfig.DebugLogEnable;
    public final static boolean E = BuildConfig.DebugLogEnable;

    public final static boolean sourceCodeLocation = BuildConfig.DEBUG;

    // 显示web api 返回内容
    private final static boolean isHttpResponse = true;

    public static boolean showHttpResponse() {
        return BuildConfig.DebugLogEnable? isHttpResponse : false;
    }

    private final static boolean isHttpRequest = false;

    public static boolean showHttpRequest() {
        return BuildConfig.DebugLogEnable? isHttpRequest : false;
    }


    // default tag
    public static String strBaseTag = "DebugLog";

    static String className;//类名
    static String methodName;//方法名
    static int lineNumber;//行数
    
    /**
     * 获取文件名、方法名、所在行数
     * @param sElements
     */
    private static void getMethodNames(StackTraceElement[] sElements){
        className = sElements[1].getFileName();
        methodName = sElements[1].getMethodName();
        lineNumber = sElements[1].getLineNumber();
    }


    private static String tagCat(String tag) {
        return new StringBuilder(strBaseTag).append("[").append(tag).append("]").toString();
    }

    public static void i(String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (I) handleLog(level_i, strBaseTag, log);
    }

    public static void i(Object tag, String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (I)
            handleLog(level_i, tagCat(tag.toString()), log);
    }

    public static void v(String log) {

        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (V) handleLog(level_v, strBaseTag, log);
    }

    public static void v(Object tag, String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (V)
            handleLog(level_v, tagCat(tag.toString()), log);
    }

    public static void d(String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (D) handleLog(level_d, strBaseTag, log);
    }

    public static void d(Object tag, String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (D)
            handleLog(level_d, tagCat(tag.toString()), log);
    }

    public static void w(String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (W) handleLog(level_w, strBaseTag, log);
    }

    public static void w(Object tag, String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (W)
            handleLog(level_w, tagCat(tag.toString()), log);
    }

    public static void e(String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (E) handleLog(level_e, strBaseTag, log);
    }

    public static void e(Object tag, String log) {
        if(sourceCodeLocation)
        {
            getMethodNames(new Throwable().getStackTrace());
        }
        if (E)
            handleLog(level_e, tagCat(tag.toString()), log);
    }

    private static void handleLog(int level, String tag, String msg) {
        if (msg == null) return;
        try {
            String tagCodeSource=sourceCodeLocation?("-"+methodName+"("+className+":"+lineNumber+")"):"";
            int strLength = msg.length();
            int start = 0;
            int LOG_MAXLENGTH = 2048;
            int end = LOG_MAXLENGTH;
            while (end < strLength) {
                String subString = msg.substring(start, end);
                switch(level)
                {
                    case level_d:
                        Log.d(tag+tagCodeSource,subString);
                        break;
                    case level_e:
                        Log.e(tag+tagCodeSource,subString);
                        break;
                    case level_i:
                        Log.i(tag+tagCodeSource,subString);
                        break;
                    case level_v:
                        Log.v(tag+tagCodeSource,subString);
                        break;
                    case level_w:
                        Log.w(tag+tagCodeSource,subString);
                        break;
                }
                start = end;
                end = end + LOG_MAXLENGTH;
            }
            String subString =msg.substring(start, strLength);
            switch(level)
            {
                case level_d:
                    Log.d(tag+tagCodeSource,subString);
                    break;
                case level_e:
                    Log.e(tag+tagCodeSource,subString);
                    break;
                case level_i:
                    Log.i(tag+tagCodeSource,subString);
                    break;
                case level_v:
                    Log.v(tag+tagCodeSource,subString);
                    break;
                case level_w:
                    Log.w(tag+tagCodeSource,subString);
                    break;
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    // log level
    private static final int level_i = 1;
    private static final int level_v = 2;
    private static final int level_d = 3;
    private static final int level_w = 4;
    private static final int level_e = 5;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值