项目工具类 log调试页面

package com.c03.jy.wanandroid.wanandroidmy.utils;

import android.util.Log;

import java.util.Locale;

/**

  • adb shell
  • setprop log.tag.{@link #PRIVATE_TAG} LOG_LEVEL
  • Created by taofu on 2018/06/07.
  • eg: Logger.v("%s %s %d + %d = %d,",“TAG”,"Hello: ",5,6,11)
  • will print “TAG Hello: 5 + 6 = 11”
    */

public class Logger {

private static final String SIMPLE_PREFIX = "[(%s:%d)#%s()] ->  ";
private static final String MORE_DETAIL_PREFIX = "at %s.%s(%s:%d)";


private static final StringBuffer mMessageBuffer = new StringBuffer();
private static String PRIVATE_TAG = "wanandroid";
private static String PUBLIC_TAG = "wanandroid";
private static boolean mDebugable = true;
public  static boolean DEBUG_V = Log.isLoggable(PRIVATE_TAG, Log.VERBOSE);
public  static boolean DEBUG_D = Log.isLoggable(PRIVATE_TAG, Log.DEBUG);
private static boolean DEBUG_MORE_DETAIL_STACK_INFO = false;
private static int  STACK_TRACE_INDEX = 5;
private static final String SUFFIX = ".java";


/**
 * 正式发布产品的时候应该关闭debug 模式
 *
 * @param debug 设置Log 模式,如果true 表示debug模式该模式可以从控制台查看相关log信息,否则不是
 */
public static void setDebug(boolean debug) {
    mDebugable = debug;
}




public static synchronized void v(String format, Object... args) {

    if(mDebugable){
        log(Log.VERBOSE,buildPrivateMessage(null,format, args));
    }else{
        if(DEBUG_V){
            log(Log.VERBOSE,buildPrivateMessage(null,format, args));
        }
    }

}

/**
 * 级别最低,用于输出任意对调试或者开发过程中有帮助的信息,
 *
 * @param format the format string (see {@link java.util.Formatter#format})
 * @param args   the list of arguments passed to the formatter. If there are
 *               more arguments than required by {@code format},
 *               additional arguments are ignored.
 */

public static synchronized void v(Throwable throwable, String format, Object... args) {

    if(mDebugable){
        log(Log.VERBOSE,buildPrivateMessage(throwable,format, args));
    }else{
        if(DEBUG_V){
            log(Log.VERBOSE,buildPrivateMessage(throwable,format, args));
        }
    }




}

public static synchronized void d(String format, Object... args) {

    if(mDebugable){
        log(Log.DEBUG,buildPrivateMessage(null,format, args));
    }else{
        if(DEBUG_D){
            log(Log.DEBUG,buildPrivateMessage(null,format, args));
        }
    }

}

/**
 * 调试级别, 比VERBOSE高,用于输出调试信息
 *
 * @param format the format string (see {@link java.util.Formatter#format})
 * @param args   the list of arguments passed to the formatter. If there are
 *               more arguments than required by {@code format},
 *               additional arguments are ignored.
 */

public static synchronized void d(Throwable throwable, String format, Object... args) {


    if(mDebugable){
        log(Log.DEBUG,buildPrivateMessage(throwable,format, args));
    }else{
        if(DEBUG_D){
            log(Log.DEBUG,buildPrivateMessage(throwable,format, args));
        }
    }
}

/**
 * 用于输出比较重要的信息,系统默认的级别,
 *
 * @param format the format string (see {@link java.util.Formatter#format})
 * @param args   the list of arguments passed to the formatter. If there are
 *               more arguments than required by {@code format},
 *               additional arguments are ignored.
 */
public static void i(String format, Object... args) {
    Log.i(PUBLIC_TAG, buildPrivateMessage(null,format, args));
}

public static void i(Throwable throwable, String format, Object... args) {

    Log.i(PUBLIC_TAG, buildPrivateMessage(null,format, args), throwable);
}

public static void w(String format, Object... args) {
    Log.w(PUBLIC_TAG, buildPrivateMessage(null,format, args));

}

public static void w(Throwable throwable, String format, Object... args) {
    Log.w(PUBLIC_TAG, buildPrivateMessage(throwable,format, args), throwable);
}

public static void e(String format, Object... args) {
    Log.e(PUBLIC_TAG, buildPrivateMessage(null,format, args));
}

public static void e(Throwable throwable, String format, Object... args) {
    Log.e(PUBLIC_TAG, buildPrivateMessage(null,format, args), throwable);
}



public String formatJson(String json){
    return LogJsonFormat.format(json);
}


private static String getSimpleStackTrace(){
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
    StackTraceElement targetElement = stackTrace[STACK_TRACE_INDEX];
    return  String.format(Locale.getDefault(),SIMPLE_PREFIX,targetElement.getFileName(),targetElement.getLineNumber(),targetElement.getMethodName());

}

public static String getMoreDetailStackTrace() {
    StackTraceElement traceElements[] = Thread.currentThread().getStackTrace();
    StringBuilder builder = new StringBuilder();
    for (int i = STACK_TRACE_INDEX; i < Math.min(traceElements.length, 10); i++) {
        StackTraceElement traceElement = traceElements[i];
        builder.append(String.format(Locale.getDefault(), MORE_DETAIL_PREFIX, traceElement.getClassName(),
                traceElement.getMethodName(), traceElement.getFileName(), traceElement.getLineNumber()));
        builder.append("\n");
    }
    return builder.toString();
}


private static String buildPrivateMessage(Throwable throwable, String format, Object... args) {
    mMessageBuffer.delete(0, mMessageBuffer.length());

    try {
        mMessageBuffer.append("{ ");

        mMessageBuffer.append(getSimpleStackTrace());

        mMessageBuffer.append((args == null) ? format : String.format(Locale.CHINA, format, args));
    } catch (Exception e) {
        mMessageBuffer.append("buildPrivateMessage exception " + e.getMessage());
    }

    if(DEBUG_MORE_DETAIL_STACK_INFO){
        mMessageBuffer.append("\n");
        mMessageBuffer.append(getMoreDetailStackTrace());
        mMessageBuffer.append("\n");
    }
    if(throwable != null){

        mMessageBuffer.append(throwable.toString());
        mMessageBuffer.append("\n");
    }
    mMessageBuffer.append(" } \n");


    return mMessageBuffer.toString();
}

public static String isNull(Object o) {
    return o == null ? " Null" : "Not Null";
}

public static String toStringOb(Object o) {
    return o == null ? " Null" : o.toString();
}

private static  boolean isEnableDebug(){
    if(!mDebugable){
        return false;
    }

    if(!DEBUG_V){
        return false;
    }

    return true;
}

private static void log(int level, String mes){

    if(mes.length() > 4000){
        for(int i = 0 ; i < mes.length(); i += 4000 ){
            if( i + 4000 < mes.length()){

                println(level,mes.substring(i,i + 4000));
            }else{
                println(level,mes.substring(i,mes.length()));
            }

        }
    }else{
        println(level,mes);
    }
}


private static void println(int level,String mes){

    switch (level){
        case Log.ERROR:
            Log.e(PRIVATE_TAG,mes);
            break;
        case Log.WARN:
            Log.w(PRIVATE_TAG,mes);
            break;
        case Log.INFO:
            Log.i(PRIVATE_TAG,mes);
            break;
        case Log.DEBUG:
            Log.d(PRIVATE_TAG,mes);
            break;
        case Log.VERBOSE:
            Log.v(PRIVATE_TAG,mes);
            break;
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值