对Log日志的简易封装

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值