Log是开发调试的必备工具,使用频率比较高,系统自带的log打印已经为我们做好了分级,方便在筛选.但是在实际使用中总觉得还不够完善,这里对Log日志进行一个简易的封装.
先看封装后的使用
使用
ILog.i("这是log");
设置(可在application中设置)
ILog.setDebug(true);//设置是否打印日志 ILog.setShowInfo(true);//是否在打印添加附加信息 ILog.setSeparator("-");//附加信息的分隔符
作用
- 根据系统运行模式(debug/relase)自动判断是否输出log(默认,可设置)
- 自动使用类名作为TAG(默认,可自行指定tag)
- 增加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();
}
}