对Log日志的简易封装

来源:互联网 发布:伦敦帝国学院 知乎 编辑:程序博客网 时间:2024/05/19 03:23

Log是开发调试的必备工具,使用频率比较高,系统自带的log打印已经为我们做好了分级,方便在筛选.但是在实际使用中总觉得还不够完善,这里对Log日志进行一个简易的封装.

先看封装后的使用

  • 使用

    ILog.i("这是log");
  • 设置(可在application中设置)

    ILog.setDebug(true);//设置是否打印日志ILog.setShowInfo(true);//是否在打印添加附加信息ILog.setSeparator("-");//附加信息的分隔符

作用

  1. 根据系统运行模式(debug/relase)自动判断是否输出log(默认,可设置)
  2. 自动使用类名作为TAG(默认,可自行指定tag)
  3. 增加log的附加信息的打印,包括类名,方法名,线程(默认打印,可关闭)

附加信息的打印

默认开启附加信息的打印,包括方法名-线程名-行数.附加信息会显示在log实际信息的后面
可调用setShowInfo(false)关闭附加信息的打印

附加信息分割符默认为”,”,可通过setSeparator()设置自己喜欢的分隔符

源码

package com.example.chenzhen.isimpledemo.helper;import android.text.TextUtils;import android.util.Log;import com.example.chenzhen.isimpledemo.BuildConfig;/** * =================中康================ * * @Author: 陈振 * @Email : 18620156376@163.com * @Time : 2016/8/17 10:11 * @Action :log工具类 * 1-根据系统运行模式(debug/relase)自动判断是否输出log * 2-自动使用类名作为TAG * 3-增加log的附加信息的打印,包括类名,方法名,线程 * * =================中康================ */public class ILog {    private static boolean debug = BuildConfig.DEBUG;//是否开启debug,默认根据运行方式选择    private static String separator = ",";//分隔符    private static boolean showInfo = true;//是否显示log附加信息,包括线程名+方法名+行数    public static void setDebug(boolean iSDebug) {        ILog.debug = iSDebug;    }    public static void setSeparator(String separator) {        ILog.separator = separator;    }    public static void setShowInfo(boolean showInfo) {        ILog.showInfo = showInfo;    }    public static void v(String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            String tag = getDefaultTag(stackTraceElement);            Log.v(tag, message + getLogInfo(stackTraceElement));        }    }    public static void v(String tag, String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            if (TextUtils.isEmpty(tag)) {                tag = getDefaultTag(stackTraceElement);            }            Log.v(tag, message + getLogInfo(stackTraceElement));        }    }    public static void d(String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            String tag = getDefaultTag(stackTraceElement);            Log.d(tag, message + getLogInfo(stackTraceElement));        }    }    public static void d(String tag, String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            if (TextUtils.isEmpty(tag)) {                tag = getDefaultTag(stackTraceElement);            }            Log.d(tag, message + getLogInfo(stackTraceElement));        }    }    public static void i(String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            String tag = getDefaultTag(stackTraceElement);            Log.i(tag, message + getLogInfo(stackTraceElement));        }    }    public static void i(String tag, String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            if (TextUtils.isEmpty(tag)) {                tag = getDefaultTag(stackTraceElement);            }            Log.i(tag, message + getLogInfo(stackTraceElement));        }    }    public static void w(String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            String tag = getDefaultTag(stackTraceElement);            Log.w(tag, message + getLogInfo(stackTraceElement));        }    }    public static void w(String tag, String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            if (TextUtils.isEmpty(tag)) {                tag = getDefaultTag(stackTraceElement);            }            Log.w(tag, message + getLogInfo(stackTraceElement));        }    }    public static void e(String tag, String message) {        if (debug) {            StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];            if (TextUtils.isEmpty(tag)) {                tag = getDefaultTag(stackTraceElement);            }            Log.e(tag, message + getLogInfo(stackTraceElement));        }    }    /**     * 获取默认的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;    }    /**     * 输出日志所包含的信息     */    public static String getLogInfo(StackTraceElement stackTraceElement) {        if (!showInfo) return "";        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("threadName=" + threadName).append(separator);//        logInfoStringBuilder.append("fileName=" + fileName).append(separator);//        logInfoStringBuilder.append("className=" + className).append(separator);        logInfoStringBuilder.append("methodName=" + methodName).append(separator);        logInfoStringBuilder.append("lineNumber=" + lineNumber);        logInfoStringBuilder.append(" ] ");        return logInfoStringBuilder.toString();    }}  
0 0
原创粉丝点击