自带行号的log日志提示

                                                                    HELLO ,I MISS YOU!


使用环境:

              需要在打印log的同时,提示在项目类之中的哪一行。

使用方法:

              copy


public class LogUtil {
    private static boolean isDebug = false;
    // 是否在log中显示行号
    private static boolean SHOW_LINE_NUMBER_IN_LOG = isDebug;
    private static final String TAG = "com.sgcc.pda";
    //是否已初始化
    private static boolean initFlag = false;

    public static void init(boolean debugFlag) {
        isDebug = debugFlag;
        SHOW_LINE_NUMBER_IN_LOG = debugFlag;
        initFlag = true;
    }

    /**
     * 打印Log.w信息
     *
     * @param aPrintLogStr 打印信息字符串
     */
    public static void w(String aPrintLogStr) {
        LOG(TAG, aPrintLogStr, Log.WARN, false);
    }

    public static void w(String tag, String aPrintLogStr) {
        LOG(tag, aPrintLogStr, Log.WARN, false);
    }

    public static void i(String tag, String aPrintLogStr) {
        LOG(tag, aPrintLogStr, Log.INFO, false);
    }

    public static void i(String aPrintLogStr) {
        LOG(TAG, aPrintLogStr, Log.INFO, false);
    }

    public static void callerI(String aPrintLogStr) {
        LOG(TAG, aPrintLogStr, Log.INFO, true);
    }

    public static void d(String tag, String aPrintLogStr) {
        LOG(tag, aPrintLogStr, Log.DEBUG, false);
    }

    public static void d(String aPrintLogStr) {
        LOG(TAG, aPrintLogStr, Log.DEBUG, false);
    }

    public static void e(String tag, String aPrintLogStr) {
        LOG(tag, aPrintLogStr, Log.ERROR, false);
    }
    private static int LOG_MAXLENGTH = 2000;

    public static void e(String aPrintLogStr) {
        LOG(TAG, aPrintLogStr, Log.ERROR, false);
    }

    public static void v(String tag, String aPrintLogStr) {
        LOG(tag, aPrintLogStr, Log.VERBOSE, false);
    }

    /**
     * @param tag        log的tag
     * @param content    log的内容
     * @param logType    log的类型,如Log.INFO,Log.DEBUG等
     * @param showCaller 是否显示调用者的方法名和行号等
     */
    private static void LOG(String tag, String content, int logType, boolean showCaller) {
        if (!initFlag) {
            Log.e("LogUtil", "LogUtil没有初始化,请先初始化后使用,如果未初始化Log将不会输出显示");
        }
        if (isDebug) {
            if (SHOW_LINE_NUMBER_IN_LOG) {
                Throwable throwable = new Throwable();
                //LogUtils.LOGI的depth是0, 该函数的depth是1, 调用者的depth是2,调用者的调用者是3
                int methodDepth = 2;
                StackTraceElement[] stackTraceElements = throwable.getStackTrace();

                if (methodDepth < stackTraceElements.length) {
                    StackTraceElement element = stackTraceElements[methodDepth];

                    if (showCaller) {
                        if ((methodDepth + 1) < stackTraceElements.length) {
                            StackTraceElement elementCaller = stackTraceElements[methodDepth + 1];
                            if (elementCaller != null && elementCaller.getFileName() != null) {
                                String callerClassName = elementCaller.getFileName().substring(0, elementCaller.getFileName().lastIndexOf("."));
                                String className = element.getFileName().substring(0, element.getFileName().lastIndexOf("."));
                                String loginfo = String.format("[%s.%s() (%s:%d)]", callerClassName, elementCaller.getMethodName(), elementCaller.getFileName(), elementCaller.getLineNumber());
                                loginfo = loginfo + "\n";
                                loginfo = loginfo + "    " + String.format("[%s.%s() (%s:%d)]%s", className, element.getMethodName(), element.getFileName(), element.getLineNumber(), content);

                                content = loginfo;
                            }
                        }
                    } else {
                        if (element != null && element.getFileName() != null) {
                            String className = element.getFileName().substring(0, element.getFileName().lastIndexOf("."));
                            String loginfo = String.format("[%s.%s() (%s:%d)]%s", className, element.getMethodName(), element.getFileName(), element.getLineNumber(), content);
                            content = loginfo;
                        }
                    }
                }
            }

            switch (logType) {
                case Log.INFO:
                    Log.i(tag, "===================>" + content);
                    break;
                case Log.DEBUG:
                    Log.d(tag, "===================>" + content);
                    break;
                case Log.ERROR:
                    Log.e(tag, "===================>" + content);
                    break;
                case Log.WARN:
                    Log.w(tag, "===================>" + content);
                    break;
                case Log.VERBOSE:
                    Log.v(tag, "===================>" + content);
                    break;
                default:
                    break;
            }
        }
    }
}

分享更多android小技巧,请进群:88627109

欢迎您的光临!

猜你喜欢

转载自blog.csdn.net/csdn_loveQingQing/article/details/82911984