package com.serenegiant.xiaxl;

import android.util.Log;

/**
 * 系统的日志处理类,对android默认日志做了封装,根据系统配置的日志级别打印日志
 */
public class LogUtils {
    private static final int LOG_LEVEL_MIN = Log.VERBOSE;

    private static final String SNS_TAG = "xiaxl ";

    /**
     *
     * @param msg
     * @return
     */
    private static String getStr(String msg) {
        return msg == null ? "null" : msg;
    }

    /**
     * 获取tag,加入了类名\方法名\行号
     *
     * @param msg
     * @return
     */
    private static String getTAG(String msg) {
        /**
         * 获取类名\方法名\行号\
         */
        //
        StackTraceElement caller = Thread.currentThread().getStackTrace()[4];
        // className
        //String className = caller.getClassName();
        //className = className.substring(className.lastIndexOf(".") + 1);
        // methodName
        String methodName = caller.getMethodName();
        // lineNumber
        int lineNumber = caller.getLineNumber();

        // -------------------------
        StringBuffer sb = new StringBuffer();
        sb.append(SNS_TAG);
        sb.append(": ");
        sb.append(msg);
        //sb.append(" ");
        //sb.append(className);
        sb.append(".");
        sb.append(methodName);
        sb.append(":");
        sb.append(lineNumber);
        return sb.toString();
    }

    public static void i(String tag, String s) {
        if (LOG_LEVEL_MIN <= Log.INFO) {
            Log.i(getTAG(tag), getStr(s));
        }
    }

    public static void e(String tag, Object s) {
        if (null != s) {
            e(tag, String.valueOf(s));
        }
    }

    public static void e(String tag, String s) {
        if (LOG_LEVEL_MIN <= Log.ERROR) {
            Log.e(getTAG(tag), getStr(s));
        }
    }

    public static void e(String tag, String s, Throwable tr) {
        if (LOG_LEVEL_MIN <= Log.ERROR) {
            Log.e(getTAG(tag), getStr(s), tr);
        }
    }

    public static void d(String tag, String s) {
        if (LOG_LEVEL_MIN <= Log.DEBUG) {
            Log.d(getTAG(tag), getStr(s));
        }
    }

    public static void w(String tag, String s) {
        if (LOG_LEVEL_MIN <= Log.WARN) {
            Log.w(getTAG(tag), getStr(s));
        }
    }

    public static void w(String tag, String s, Throwable tr) {
        if (LOG_LEVEL_MIN <= Log.WARN) {
            Log.w(getTAG(tag), getStr(s), tr);
        }
    }

    public static void v(String tag, String s) {
        if (LOG_LEVEL_MIN <= Log.VERBOSE) {
            Log.v(getTAG(tag), getStr(s));
        }
    }

    public static void v(String tag, String s, Throwable tr) {
        if (LOG_LEVEL_MIN <= Log.VERBOSE) {
            Log.v(getTAG(tag), getStr(s), tr);
        }
    }
}